2015-10-16 120 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>,然后它的完全丧失,因为它不能使头部或尾部该行的其余部分。