【问题标题】:c++ class array initializationc++ 类数组初始化
【发布时间】:2011-04-20 15:43:37
【问题描述】:
所以我在标题中有这个类
class C{
int b [2];
init();
}
在 C.cpp 我有
C::init(){
bK [2] = {3,7};
}
我尝试初始化类变量 b,它是一个数组
但随后编译器返回错误expected ; before { token 和expected primary expression before { token
我做错了什么以及如何正确初始化数组类变量?
【问题讨论】:
标签:
c++
arrays
class
variables
initialization
【解决方案1】:
以; 结束您的类定义。
class C {
int b [2];
init();
};
此外,您不能在标准 C++ 中的声明之外初始化这样的数组。
【解决方案2】:
您不能在 C++0x 之前的 C++ 中执行此操作。
【解决方案3】:
标准 (2003) 不允许这样做。类中声明的数组无法初始化。
你可以这样做:
C::init(){
b[0] = 3;
b[1] = 7;
}
在 C++0x 中,你可以这样做(如果你选择使用std::vector):
class C
{
std::vector<int> b;
void init()
{
b = {3,7};
}
};
查看在线演示:http://www.ideone.com/NN5aT
【解决方案4】:
C::init(){
bK [0] = 3;
bk [1] = 7;
}
【解决方案5】:
你应该将你的类成员声明为公共的、私有的或受保护的。而且你还需要一个 init() 的返回类型。您可能还需要在类定义的末尾使用分号,而 c++ 类成员不能这样做。
您应该使用构造函数而不是 init()。这样您就不必在每次声明对象后调用 init(),它会为您完成。
class C{
private:
int b[2];
public:
C();
};
C::C()
{
b[0] = 2;
b[1] = 3;
}
编辑:在做了一些测试后,我发现它有问题。上面的代码没有错误。如果要内联初始化整个数组,则必须在其声明语句中完成。