我想声明一个包含2个元素的向量作为类成员。 但是下一个代码会产生错误:
class A {
private:
std::vector<int> v (2);
...
}
编译器诅咒“2”是常量。 据我所知,问题是,出现歧义,因为编译器将向量声明的字符串解析为函数声明(函数,以“2”作为参数并返回整数向量)。
问题:我可以避免这种歧义吗?我怎么能这样做?
PS:在类之外,这个向量声明被正确解析。
答案 0 :(得分:7)
课堂初学者必须使用大括号或等号;所以这可能是
std::vector<int> v = std::vector<int>(2);
或
std::vector<int> v {0,0}; // Careful! not {2}
或者,您可以在构造函数中使用旧式初始化:
A() : v(2) {}
答案 1 :(得分:4)
您可以安全地使用以下语法:
std::vector<int> v = std::vector<int>(2);
或者,使用大括号初始化,但必须小心:将挑选std::initializer_list<int>
构造函数,以便初始化一个具有两个值(因此为零)初始化ints
所需的向量
std::vector<int> v{0, 0};