为什么不允许使用“this”指针返回成员变量,但允许使用“this”设置成员变量?

时间:2014-09-09 14:04:40

标签: c++ pointers visual-c++ this intellisense

这是头文件代码:

#ifndef __MANAGER_H__PROJECT_A__
#define __MANAGER_H__PROJECT_A__

#include <string>

class Manager {
private:
    std::string type;
    bool isStarted;
protected:
    void setType(std::string type);
public:
    Manager();
    virtual ~Manager();

    //Get type identifier
    std::string getType();

    //Startup manager. 0: Startup ok. Any #: Not ok.
    virtual int startUp();

    //Shutdown manager. 
    virtual void shutDown();

    //True: startUp executed ok. False, otherwise.
    bool isStarted() const;
};

#endif

下面的代码显示错误为&#34;指向绑定函数的指针只能用于调用函数&#34;。

bool Manager::isStarted() const {
    return this->isStarted;        //<----   ERROR.
}

应该改为这个。

bool Manager::isStarted() const {
    return Manager::isStarted;     //<----   Correct.
}

那为什么这是可以接受的?

void Manager::setType(std::string type){
    this->type = type;             //<----   Correct.
}

提前致谢。

2 个答案:

答案 0 :(得分:4)

具体来说,您已将别名isStarted作为类中方法的名称,因此this->isStarted正在尝试返回指向成员方法Manager::isStarted的指针而不是一些布尔值isStarted

因此,您的代码无法正常工作,因为它没有按照您的想法行事。而你的代码确实有效,因为它也没有按照你的想法去做;返回的指针可以隐式地转换为bool(并且始终等于true),因此您不会收到错误的返回类型错误。

答案 1 :(得分:2)

你搞砸了名字!!

isStarted是成员函数的名称。你的第一个例子是错误的。

在第二个中,您将isStarted的地址转换为bool,然后返回它(它将始终返回true !!)

在第三个中,您使用this在成员变量type和正式变量type之间正确地进行解除。