调用外部访问器功能时出错

时间:2016-03-16 16:37:06

标签: c++ visual-studio

如果我有课

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 ++问题,而且我搜索了很多,但我似乎无法找到正确的搜索条件来找出我的问题。我在函数调用中做错了什么?

1 个答案:

答案 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