我使用C ++编写代码,并且我在类的头文件中有私有数据成员。
private:
Object1 obj1;
Object2 obj2(&obj1);
因此,第二个对象获取指向第一个对象的指针。当我尝试编译程序时,我收到以下错误:
“'&'标记之前的预期标识符”
有没有办法在实现文件中实例化此类'构造函数中的对象而不是其定义?如何更正此错误?该程序将无法编译。
答案 0 :(得分:2)
在C ++中,您无法将成员初始化为类定义的一部分。这种操作应该在构造函数中完成:
myClass() : obj2( & (this->obj1) ) { ... }
这通常会生成一个警告,但只要obj2
在myClass
的构造完成之前不使用其构造函数参数,就会没问题。
答案 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在评论中指出的那样,如果类型Object1
和Object2
不同,那么您尝试做的事情可能不是正确的。
答案 3 :(得分:0)
您无法在声明中为成员分配值。你必须在类的构造函数中做到这一点。
MyClass
{
private:
Object1 obj1;
Object2 obj2;
public:
MyClass()
{
obj2 = Object2(&obj1);
}
};