2015-10-16 75 views
0

我有一個COMMON.H文件:C++二維矢量語法錯誤

typedef enum { 
    num_letters = 26, 
    num_directions = 2 
} constants; 

和另一個h文件的一類:

#include "Common.h" 
using namespace common; 
... some code ... 
    vector< vector<uint> > data(constants::num_directions, vector<uint>(constants::num_letters, 0)); 

我檢查向量的語法,它應該是正確;我也使用C++ 11 std;然而,它給我以下錯誤:

error: 'constants::num_directions' is not a type 
    vector< vector<uint> > data(constants::num_directions, vector<uint>(constants::num_letters, 0)); 

error: expected unqualified-id before ',' token 
    vector< vector<uint> > data(constants::num_directions, vector<uint>(constants::num_letters, 0)); 
                          ^
error: expected ')' before ',' token 
error: expected ')' before ',' token 
error: expected unqualified-id before numeric constant 
    vector< vector<uint> > data(constants::num_directions, vector<uint>(constants::num_letters, 0)); 

我不知道爲什麼它發生,非常感謝你提前!

+3

另一個錯誤是你使用'constants :: num_directions'。 'enum'只是'num_directions'。另外你使用的typedef在C++中沒有效果(在C中它)。如果你想擁有'constants :: num_directions'(你應該這樣做),你需要寫'enum class constants {...}'或者把常規的'enum'放到一個名字空間中。 – nwp

+1

這適用於我。你可以構造一個[最小示例](http://stackoverflow.com/help/mcve)的問題? – Taus

回答

0

您沒有提供足夠的代碼,以可靠地重現您的問題,所以我來試試看胡亂猜測:

從你的編譯器發出它看起來好像它解釋整條生產線的函數聲明,而不是錯誤信息作爲變量定義。這可能是由於這樣的事實,正如在評論中指出的那樣,constants::num_directions不是使用普通枚舉的枚舉器的有效方法。因此,編譯器解析像函數聲明

ResultType f(ArgType1, Argtype2(argname2)) 

隨着ResultTyoe爲vector<vector<uint>>ArgType1constants::num_directions它不承認類型的線,ArgType2vector<uint>,然後它的完全喪失,因爲它不能使頭部或尾部該行的其餘部分。