red*_*aks 1 c++ static-methods
我想知道为什么不能从静态函数调用成员函数
#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;
}
Run Code Online (Sandbox Code Playgroud)
编译器正在返回此信息
main.cpp: In static member function ‘static void A::astaticFunction()’:
main.cpp:8:16: error: cannot call member function ‘void A::printHello()’ without object
Run Code Online (Sandbox Code Playgroud)
我该如何使用它?谢谢
您只能从静态成员函数内部调用其他静态成员函数.这是因为非静态成员函数与对象的特定实例相关联.这里没有实例.
所以一个快速解决方法是使printHello静态:
static void printHello(){
std::cout << "Hello" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
如果您需要 printHello处理特定的实例A(因为可能在您的实际代码中它使用非静态数据成员),那么您需要创建该实例.你可以这样做:
static void astaticFunction(){
A a; // Create an A object
a.printHello();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7210 次 |
| 最近记录: |