0

我有一些产生错误的 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

4 回答 4

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);

正如克里斯所指出的,如果字段为public,您还可以使用聚合初始化,例如您的示例:

foo test = { 1, 2 };

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

于 2013-07-24T18:41:00.130 回答
1

这应该是:

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

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

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

于 2013-07-24T18:42:57.783 回答
0

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

//add this
foo(): a(0), b(0) { };
//maybe a deconstructor, depending on your compiler
~foo() { };
于 2013-07-24T18:44:18.287 回答
0

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

test.a=1
test.b=2

因此无效。如果您确实需要初始化,请使用构造函数,例如

class foo
{
public:
    foo(const int a, const int b);

    int a;
    int b;
}

否则,您可以将初始化例如放入主函数中。

于 2013-07-24T18:46:56.997 回答