2013-02-28 50 views
0

我有這些在我的文件的開頭:C++ priority_queue沒有推?

#include <queue> 

typedef struct cell_s { 
    unsigned int x; 
    unsigned int y; 
    unsigned int ambiguity = 9; 
} cell_t; 

// so the priority_queue can sort the structs: 
bool operator<(const cell_t &a, const cell_t &b) { 
    return a.ambiguity < b.ambiguity; 
} 

在我宣佈一個priority_queue爲一類的私有成員相同的文件,像這樣:

priority_queue<cell_t> blankCellQueue; 

然後,我有一個

cell_t cell; 
cell.x = x; 
cell.y = y; 
blankCellQueue.push(cell); 

但Xcode是呈現在我的共享的最後一行這樣的警告:包含這些行同一類的成員函數

「調用'push'時沒有匹配的成員函數」。

+7

爲什麼你像使用C++時那樣聲明你的struct C? – Caesar 2013-02-28 20:21:52

+2

請填寫完整的例子。 – 2013-02-28 20:25:46

+0

編譯器是否還有其他錯誤? – 2013-02-28 20:30:16

回答

1

對不起,浪費了你所有的時間。我發現了這個問題。 priority_queue是我班的成員。我試圖編輯priority_queue的函數是一個我標記爲const的成員函數,因爲我沒有預料到當我最初編寫它時沒有任何隊列需要修改任何類變量。從const成員函數調用成員對象的push是一個明顯的禁忌。我只是希望Xcode提供了一些有用的錯誤消息......沿着「從const函數調用的非const函數」這一行的東西將是一個非常有用的消息。

由於我沒有提供成員函數聲明,所以任何人都很難在這裏指出我的意思。

感謝您的幫助!

2

priority_queue是命名空間的一部分,std。您需要使用std::priority_queue

+1

如果情況不是這樣的話錯誤是在聲明而不是推動。但是,再次,他可能沒有按照正確的順序出現錯誤。 – Caesar 2013-02-28 20:24:53

+0

@Caesar同意。 – David 2013-02-28 20:25:33

+0

這兩個都是錯誤,你是對的。而且,是的,他提供的代碼不完整,所以我假設錯誤也可能不完整。 – 2013-02-28 20:26:16

1

C++ 11的std::priority_queue是一個標準容器適配器和它確實有成員函數push() - 查看鏈接參考。

但是,您可能會發現您的C++標準庫的實現不符合標準。您應該升級到最新版本。

你可以看到你的代碼編譯here。它需要在priority_queue之前添加std::名稱空間限定符,但我不認爲這是此問題的根本原因。如果是的話,你的編譯器錯誤應該是不同的(或者你之前應該會收到其他錯誤)。

+0

推前一直在那裏之前C++ 11 – Caesar 2013-02-28 20:29:15

+1

你* *添加'std ::'到'priority_queue' :) – 2013-02-28 20:29:28

+1

@Sancho:對,我不得不,但我假設OP有一個'使用命名空間std'或者在他的頭文件中使用'using'聲明,否則編譯器會在調用push()之前發出錯誤的方式。 – 2013-02-28 20:31:19