我希望有一个包含向量的节点数据结构。我事先知道了向量的大小,因此我使用SIZE
说明符预先初始化const
变量。
vectorTest.cpp
):#include <vector>
const int SIZE = 100;
struct node {
std::vector<int> myVec(SIZE); // ERROR: 'SIZE' is not a type
};
int main(int argc, char const *argv[]) {
std::vector<int> myVec(SIZE); // VALID
return 0;
}
g++ 5.4.0
):g++ -std=c++1y vectorTest.cpp -o vectorTest
在main()
内,一切都很好,我可以高兴地宣布:std::vector<int> A(SIZE);
。但是,当我尝试在struct
内定义相同内容时,我收到错误消息'SIZE' is not a type
。
我知道我可以使用C风格的数组定义来声明int
s的向量,
struct other_node {
int myVec[SIZE]; // VALID
};
但我想知道为什么std::vector
无法做到这一点。
struct
?答案 0 :(得分:5)
这个错误是什么意思?
编译器期望行中的函数声明。因此,它期待一种类型而不是一种价值。
为什么我不能在
中声明预定义大小的矢量struct
?
您可以使用:
// Legal but it initializes myVector with one element whose value is SIZE.
// std::vector<int> myVec{SIZE};
std::vector<int> myVec = std::vector<int>(SIZE);
答案 1 :(得分:4)
编译器不希望在类型定义中的那个点进行初始化(它与struct
无关,也可能是class
或union
) 。唯一有效的是成员函数的声明,其结构为<returntype> <name>(<arguments...>)
。对于参数,您可以省略名称并仅提供类型。在这种情况下,它是SIZE
,但由于这不是一个类型,你会收到错误。
工作方案:
vector<int> myVec = vector<int>(SIZE);
注意:
ALL_UPPERCASE
并且仅用于宏。这个约定可以帮助你发现它们,这就像是对它们不同行为的警告。