【发布时间】:2012-01-16 19:06:45
【问题描述】:
我遇到了一个我觉得很愚蠢的问题,因为它基本上只是一个 2000 行 OOP 脚本中的两行代码。
切入正题——我有一个实体类,它提供各种信息(姓名、地址、ID)。问题是——即使 ID mutator(setter)设置了一个合适的值(用 cout 和返回值测试),访问器总是返回 0。
// ID accessor
int Entity::ID() const {
return _ID;
}
// ID mutator
int& Entity::ID( int newID ) {
if ( newID >= 0 ) {
_ID = newID;
}
return _ID;
}
这是我的类(ID( int ) 方法在 AgencyNetwork::createXXX() 中调用,并在每个 toStr() 方法中使用(在每个类的末尾)):
Entity.cpp、AgencyNetwork.cpp、Agent.cpp
已解决:我忘记在每个 operator= 中添加 ID mutator。感谢所有帮助过的人:)
【问题讨论】:
-
任何能重现问题的小型独立样本?
-
嗯,AgencyNetwork.ccp 第 139 行是对 mutator 的调用,Agent.cpp 第 275 行是对访问器的调用。我希望这就是你的样本。我认为仅仅将 mutator/accessor 放在“野外”并没有什么意义,因为它是 OOP :)
-
从 'mutator' 成员函数返回
int &不好。尝试返回普通的int。 -
DaddyM:谢谢你的建议,但我都试过了,没有任何改变。
-
“独立样本”是我们可以复制、粘贴、编译和运行的代码。例如
int main() {Entity entity;entity.ID(2);cout<<entity.ID();return 0;}(当然格式更好)以及实体标头和实现。没有标头,我们无法编译您的实现。
标签: c++ oop getter-setter accessor mutators