这是头文件代码:
#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.
}
提前致谢。
答案 0 :(得分:4)
具体来说,您已将别名isStarted
作为类中方法的名称,因此this->isStarted
正在尝试返回指向成员方法Manager::isStarted
的指针而不是一些布尔值isStarted
。
因此,您的代码无法正常工作,因为它没有按照您的想法行事。而你的代码确实有效,因为它也没有按照你的想法去做;返回的指针可以隐式地转换为bool
(并且始终等于true
),因此您不会收到错误的返回类型错误。
答案 1 :(得分:2)
你搞砸了名字!!
isStarted
是成员函数的名称。你的第一个例子是错误的。
在第二个中,您将isStarted
的地址转换为bool,然后返回它(它将始终返回true !!)
在第三个中,您使用this
在成员变量type
和正式变量type
之间正确地进行解除。