我想知道为什么不能从静态函数中调用成员函数
#include <iostream>
class A{
public:
A(){}
~A(){}
static void astaticFunction(){
printHello();
}
private:
void printHello(){
std::cout << "Hello" << std::endl;
}
};
int main(int argc, char **argv){
A::astaticFunction();
return 0;
}
编译器正在返回此
main.cpp: In static member function ‘static void A::astaticFunction()’:
main.cpp:8:16: error: cannot call member function ‘void A::printHello()’ without object
我该如何使用它? 谢谢
答案 0 :(得分:9)
您只能从静态成员函数内部调用其他静态成员函数。这是因为非静态成员函数与对象的特定实例相关联。这里没有实例。
因此,一个快速解决方法是使printHello
静态:
static void printHello(){
std::cout << "Hello" << std::endl;
}
如果您需要 printHello
来处理A
的特定实例(因为可能在您的真实代码中它使用了非静态数据成员),那么您需要创建该实例。你可以这样做:
static void astaticFunction(){
A a; // Create an A object
a.printHello();
}
答案 1 :(得分:0)
正如sftrabbit所说,您无法从静态成员函数访问非静态成员。正如对原因的解释一样,非静态成员函数是使用隐式传递 this (实例指针)的调用约定来调用的。所以当你调用它们时,除了定义的参数之外,还有一个隐藏的这个参数。