#include<iostream> using namespace std; class Test { private: int x; int y; public: Test(int x = 0, int y = 0) { this->x = x; this->y = y; } static void fun1() { cout << "Inside fun1()"; } static void fun2() { cout << "Inside fun2()"; this->fun1(); } }; int main() { Test obj; obj.fun2(); return 0; }为什么会报错
时间: 2024-03-25 19:38:05 浏览: 99
使用include <iostream>时一定要加using namespace std
上述代码会导致编译错误,错误信息为:"invalid use of 'this' in non-member function"。
`fun2()`是一个静态成员函数,它不能访问非静态成员变量和非静态成员函数,因此不能使用`this`指针。在`fun2()`中,使用了`this->fun1()`来调用静态成员函数`fun1()`,这是非法的,因为`this`指针只能用于非静态成员函数中。
要修复这个问题,可以将`fun1()`的调用方式更改为`Test::fun1()`,即使用作用域解析运算符来指定静态成员函数所属的类。修改后的`fun2()`函数如下:
```
static void fun2() {
cout << "Inside fun2()";
Test::fun1();
}
```
这样就可以在静态成员函数中调用另一个静态成员函数了。
阅读全文