C ++头文件中的对象初始化问题

时间:2010-12-11 22:06:56

标签: c++ pointers header ampersand

我使用C ++编写代码,并且我在类的头文件中有私有数据成员。

private:
      Object1 obj1;
      Object2 obj2(&obj1);

因此,第二个对象获取指向第一个对象的指针。当我尝试编译程序时,我收到以下错误:

“'&'标记之前的预期标识符”

有没有办法在实现文件中实例化此类'构造函数中的对象而不是其定义?如何更正此错误?该程序将无法编译。

4 个答案:

答案 0 :(得分:2)

在C ++中,您无法将成员初始化为类定义的一部分。这种操作应该在构造函数中完成:

myClass() : obj2( & (this->obj1) ) { ... }

这通常会生成一个警告,但只要obj2myClass的构造完成之前不使用其构造函数参数,就会没问题。

答案 1 :(得分:1)

你不能这样写:

 Object2 obj2(&obj1);

使用构造函数初始化对象,如下所示:

class Sample
{
private:
      Object1 obj1;
      Object2 obj2;
public:
     Sample(Object1 o1)  : obj1(o1), obj2(&o1)
     { 
     }
};

阅读本文以详细了解这一点:

http://www.cprogramming.com/tutorial/initialization-lists-c++.html

答案 2 :(得分:1)

您的编译器告诉您这个错误的原因是您正在尝试创建一个名为obj2的方法,返回一个Object2,它将参考作为参数。但它无法弄清楚参考的类型是什么。

另一方面,如果你想在构造对象之前设置引用,你可以这样写:

Object2* obj2 = &obj1;

修改

  

如何更正此错误?该程序将无法编译。

让你的程序编译并不总是最好的解决方案,也许有一个原因导致它无法编译,你必须理解它为什么会这样。简单地纠正错误可能对您的原因没有帮助。正如Nawaz在评论中指出的那样,如果类型Object1Object2不同,那么您尝试做的事情可能不是正确的。

答案 3 :(得分:0)

您无法在声明中为成员分配值。你必须在类的构造函数中做到这一点。

MyClass
{
    private:
        Object1 obj1;
        Object2 obj2;

    public:
        MyClass()
        {
            obj2 = Object2(&obj1);
        }
};