主要的C ++对象初始化

时间:2013-07-24 18:38:38

标签: c++

我有一些产生错误的C ++代码:

class foo{
  public:
    int a; 
    int b;
};

foo test;
test.a=1;   //error here
test.b=2;

int main()
{
    //some code operating on object test
}

我收到此错误:

error: expected constructor, destructor, or type conversion before '.' token

错误意味着什么,我该如何解决?

4 个答案:

答案 0 :(得分:3)

它被称为构造函数。包括一个将所需值作为参数。

class foo
{
public:
    foo(int aa, int bb)
        : a(aa), b(bb)  // Initializer list, set the member variables
        {}

private:
    int a, b;
};

foo test(1, 2);

如chris所述,如果字段为public,您也可以使用聚合初始化,如示例所示:

foo test = { 1, 2 };

这也适用于C ++ 11兼容编译器和构造函数,如我的例子所示。

答案 1 :(得分:1)

这应该是:

class foo
{
  public:
    int a; 
    int b;
};

foo test;
int main()
{
  test.a=1;
  test.b=2;
}

你不能在方法/函数之外编写代码,只能声明变量/类/类型等。

答案 2 :(得分:0)

您需要一个默认构造函数:

//add this
foo(): a(0), b(0) { };
//maybe a deconstructor, depending on your compiler
~foo() { };

答案 3 :(得分:0)

您无法在函数外部调用变量初始化。如评论中所述

test.a=1
test.b=2
因此

无效。如果您确实需要初始化,请使用

之类的构造函数
class foo
{
public:
    foo(const int a, const int b);

    int a;
    int b;
}

否则你可以进行初始化,例如进入主要功能。