为了理解如何使用 initializer_list ,我正在编写一个自己的构造函数来填充整数向量(解释here):
#include <vector>
class X
{
std::vector< int > *vec;
public:
X(std::initializer_list<int>);
};
X(std::initializer_list<int> values)
{
this->vec = new std::vector<int>(values);
}
该行
X(std::initializer_list<int> values)
我的 g ++ -std = c ++ 11 :在值之前无效的声明符被拒绝。
为什么?答案 0 :(得分:5)
正如Bo Persson注意到的那样:
X(std::initializer_list<int> values)
必须写
X::X(std::initializer_list<int> values)
答案 1 :(得分:1)
正如您所发现的,当您在类定义之外定义成员函数(包括特殊成员函数)时,必须使用完全限定名称。这是必要的,以表明您声明的功能是该类的成员,而不是自由功能。关于班级定义,还有其他一些事项需要解决。
class X
{
std::vector< int > vec;
// ^^^ - it's unlikely this needs to be a pointer
public:
X(std::initializer_list<int>);
};
X::X(std::initializer_list<int> values)
//^^^ - fully qualified name required
: vec(values) // use the constructor initializer list
// instead of assignment within the body
{
}