0

我遇到了一个奇怪的问题。当我尝试编写一个返回指向子类的指针的函数时,我将其交换为该子类的不同实例,我得到“错误 C2106:'=':左操作数必须是左值”错误。

问题在于one->getMe() = two;

class subClass{};

class someClass{

public:

subClass * pointer;

someClass(){
    pointer = new subClass;
}

subClass * getMe(){
    return pointer;
}

};

int main(){

someClass * one = new someClass;
subClass * two = new subClass;

one->getMe() = two; 
}

我对 c++ 有点陌生,所以问题可能非常简单。任何帮助深表感谢。

4

2 回答 2

5

从函数返回的指针是对象中指针的副本。它是临时的,你不能分配给它。即使您可以分配给它,它也没有用,因为它不再连接到对象中的指针。如果您希望能够在从函数返回对象的指针后分配给它,您希望通过引用返回指针。

subClass *& getMe() {
    return pointer;
}

您还应该考虑添加一个 const 重载以处理 const 对象。它可能看起来像这样:

subclass * const & getme() const {
    return pointer;
}
于 2013-08-23T00:21:42.303 回答
1

线

one->getMe() = two;

正在尝试将 2 处的指针分配给 one->getMe()。但是 one->getMe() 返回一个您无法分配的临时副本。如果您想通过引用返回指针并因此能够更改它,那么您可以使用签名

subClass *& getMe();

正如其他人所建议的那样。

话虽如此,您正在向所有人公开类的内部工作,并且可以查看和修改,特别是指向堆上的对象的指针,这些对象可能会或可能不会被正确释放,这是不明智的。

于 2013-08-23T00:26:21.643 回答