2011-04-20 93 views
2

所以我有这个类在头C++类的数组初始化

class C{ 

    int b [2]; 

    init(); 

} 

和C.cpp我有

C::init(){ 

    bK [2] = {3,7}; 
} 

由此我尝试初始化类变量b,其是一个数组

但随后的编译器返回错误expected ; before { tokenexpected primary expression before { token

我做错了什么,如何正确初始化数组类变量?

+0

这与您的其他问题有何不同? http://stackoverflow.com/questions/5732798/c-array-assignment-of-multiple-values – 2011-04-20 16:12:11

回答

3

;结束您的班级定义。

class C { 

    int b [2]; 

    init(); 

}; 

此外,您不能像标准C++中的声明那样初始化一个数组。

1

你不能在C++ 0x C++之前做到这一点。

0
C::init(){ 

    bK [0] = 3; 
    bk [1] = 7; 
} 
1

这是标准(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

0

您应该声明您的班级成员为公共,私人或受保护的。你也需要为你的init()返回一个类型。你也可能需要在你的类定义的末尾使用分号,这是你无法用C++类成员完成的。

您应该使用构造函数而不是init()。这样你就不必在每次声明一个对象后调用init(),它都会为你完成。

class C{ 
private: 
    int b[2]; 
public: 
    C(); 

}; 

C::C() 
{ 
    b[0] = 2; 
    b[1] = 3; 
} 

编辑:做一些测试后,我发现这是越野车。上面的代码没有错误。如果你想内联初始化整个数组,它必须在它的声明语句中完成。