撇开我使用getter/setter的事实,更有经验的C++程序员不会使用它们我遇到以下代码的问题:
#include "Player.h"
class Entity
{
public:
Entity::Entity(Player& _owner)
: owner(_owner) { }
Player &get_owner() { return this->owner; }
void set_owner(Player &_owner) { this->owner = _owner; }
private:
Player &owner;
};
Run Code Online (Sandbox Code Playgroud)
这给了我一个C2582,说set_owner函数中的'operator ='不适用于Player.我的Player类看起来像这样:
class Layer;
class Cell;
class Player
{
public:
Player();
void credit_to_balance(const long &_amount);
..more getter/setter..
private:
long balance;
Layer ¤t_layer;
Cell ¤t_cell;
};
Run Code Online (Sandbox Code Playgroud)
到现在为止我认为我的默认构造函数/析构函数和=运算符会!如果我自己没有完成它(并且它们在整个程序中使用),则由编译器构造.显然这次不是这种情况,因为其他类也会抱怨从Player中删除手动插入的默认c'tor.我甚至尝试编写一个完全相同的小示例程序(即使使用前向声明和成员也是引用)并且它有效.
在我看来它肯定应该,因为它只会复制一些引用和内在类型.这就是为什么我还没有尝试编写自己的=运算符,因为我认为编译器没有困难为我做这个.对我而言,每次我向班级介绍新成员时都会考虑更新它.
我对这个问题的想法非常多.我希望你们能告诉我我缺少的东西:)提前谢谢!
你不能"重新安置"引用,甚至不能作为引用的类成员. this->owner = _owner;不会改变成员引用的对象,它试图修改this->owner始终引用的对象并始终如此.
如果您需要更改其引用的其他对象的类,请使用指针成员而不是引用成员.您可以保持相同的公共接口,只使用&和*运算符"转换".