我正在用 C++ 编码,并且在类的头文件中有私有数据成员。
private:
Object1 obj1;
Object2 obj2(&obj1);
因此,第二个对象需要一个指向第一个对象的指针。当我尝试编译程序时,出现以下错误:
“'&' 之前的预期标识符 令牌”
有没有办法在实现文件中实例化这个类的构造函数中的对象而不是它的定义?我该如何纠正这个错误?程序不会编译。
在 C++ 中,您不能将成员初始化为类定义的一部分。这种操作应该在构造函数中完成:
myClass() : obj2( & (this->obj1) ) { ... }
这通常会产生一个警告,但只要obj2
在构造完成之前不使用其构造函数参数就myClass
可以了。
你不能这样写:
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
您的编译器通过此错误告诉您的是您正在尝试创建一个名为 的方法obj2
,并返回一个Object2
将引用作为参数的方法。但它无法弄清楚引用的类型是什么。
另一方面,如果您想在构建对象之前设置引用,您可以编写如下内容:
Object2* obj2 = &obj1;
编辑
我该如何纠正这个错误?程序不会编译。
让你的程序编译并不总是最好的解决方案,也许它不能编译是有原因的,你必须理解为什么会这样。简单地纠正错误可能无助于您的事业。正如 Nawaz 在评论中指出的那样,如果类型Object1
和Object2
不同,那么您尝试做的事情可能不是正确的。
您不能在声明中为成员赋值。您必须在类的构造函数中执行此操作。
MyClass
{
private:
Object1 obj1;
Object2 obj2;
public:
MyClass()
{
obj2 = Object2(&obj1);
}
};