#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 11:38:05 浏览: 105
上述代码会导致编译错误,错误信息为:"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();
}
```
这样就可以在静态成员函数中调用另一个静态成员函数了。
相关问题
【单选题】 #include<iostream> using namespace std class Test{ public: Test(){n+=2;} ~Test(){n-=3;} static int getNum(){return n;} private: static int n;}; int Test::n=1; int main() {Test *p=new Test; delete p; cout<<"n="<<Test::getNum()<<endl; return 0;}分析代码
本程序的输出结果为:n=-1。该程序定义了一个Test类,类中静态成员变量n的初始值为1。在main函数中,创建了一个Test类的对象p,然后又立即释放了该对象的内存空间。在创建p对象的过程中,由于调用了Test类的构造函数,n的值加2,所以n的值变为了3。在释放p对象的过程中,由于调用了Test类的析构函数,n的值减3,所以n的值变为了-1。最终,程序输出n的值为-1。
#include <iostream> using namespace std; class Test{ public: Test(int xx=1):x(xx){} void output(){ cout<<"x: "<<x<<endl; } private: int x; }; int main() { Test t; t.output(); t=4; t.output(); return 0; }
这段代码的输出结果为:
```
x: 1
x: 4
```
首先定义了一个名为 Test 的类,有一个参数为整型的构造函数和一个名为 output 的成员函数。在 main 函数中,首先创建了一个名为 t 的 Test 类对象,并调用其 output 函数,输出 x 的值为 1。接着将整型值 4 赋值给对象 t,此时 t 的 x 值变为 4,再次调用 t 的 output 函数,输出 x 的值为 4。
阅读全文