如果我有课
Class A
{
public:
UINT getfoo ();
... other stuff ...
private:
UINT initfoo (data);
UINT foo;
... other stuff ...
}
这个想法是,在类构造函数中,我设置了
foo = initfoo (data);
getfoo是一个简单的返回声明
UNIT getfoo ()
{
return foo;
}
然后从外部函数,我有一个该类的实例,我使用getfoo访问器函数来获取该类中的foo的值。
A a;
UINT myfoo;
...
myfoo = A::getfoo
-or-
myfoo = a.getfoo
但是当我尝试在外部函数中分配相同类型的值时,我不断收到错误。
使用A :: VS2013在编辑器中出现错误
UINT(A :: *)()类型的值不能分配给类型的实体 UINT
使用。编辑器没有抱怨,但是当我尝试编译时,我得到了错误:
错误C2440:'=':无法转换为'unsigned int(__thiscall A :: *)(void)'到'unsigned int'
我确定这是一个基本的c ++问题,而且我搜索了很多,但我似乎无法找到正确的搜索条件来找出我的问题。我在函数调用中做错了什么?
答案 0 :(得分:2)
你的函数调用应该是:
myfoo = a.getfoo();
此外,mutator返回值是不正常的,所以
UINT initfoo (data);
应该是
void initfoo (data);
同样优秀的做法是坚持以下访问者/变更者的命名约定:
UINT foo;
UINT getFoo();
void setFoo(UINT val);
使用const示例编辑:
class A
{
public:
// Initialise foo to some random number
A()
: foo(4U)
{
// constructor body here
}
private:
// Once initialised foo cannot change during the lifetime of this object
const UINT foo;
};
为了清楚起见,我已经一起编写了声明和实现。如果将其拆分为.h / .cpp,则intitialiser列表将使用构造函数定义进入.cpp