不是说静态函数里不可以调用非静态函数吗解决办法

不是说静态函数里不可以调用非静态函数吗
为什么我看到一个例子:
一个静态函数里调用 纯虚函数。

class Test;

静态函数:

static void fun()
{
Test* pTest=获得一个指针(静态容器里的指针)
pTest->纯虚函数();
}

------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

不是说静态函数里不可以调用非静态函数吗

不能通过this调用非静态函数。 


好吧,如果静态函数可以调用 非静态的东西

那么为什么大名鼎鼎的widnows 的线程函数 当成为成员函数的时候
此时在线程函数里使用非静态成员就回报错呢?

说明 静态函数是不能够直接操作一切非静态的东西。

放过来:一切非静态的东西可以直接操作 静态的东西。



见下面红色粗体:

引用:
静态函数中不可以调用非静态函数?没有这种说法。

非静态函数中有一个隐含的参数this,当在非静态函数中不指明对象直接调用本类的非静态函数fun时,相当于调用this->fun。

而静态函数中不存在this,因此静态函数在调用非静态函数则必须指明目标对象,例如楼主代码中的pTest。


你指明调用哪个对象的非静态函数了吗?
------解决方案--------------------
1. 如果静态容器存放了本类的指针, 此时再fun函数里间接获取了本类指针,这种情形可以调用非静态吗?
   
   如果知道了某对象的指针,就相当于知道了该对象的this, 当然可以寻址到对象的成员函数和成员数据。

2. 所谓的不能调用非静态,是包括函数, 数据 两种吗?还是只是数据?

   都不能,no-static成员默认都有this指针,表示一个偏移量,编译器在翻译你的代码的时候会把这个this当
   成参数传给成员函数,没有对象及没有this,编译期间就会出错。

你要理解this就是一个偏移量,表示对象的基地址。



------解决方案--------------------
静态函数,没有this 指针,不能直接访问,本类的非静态成员(成员函数和成员变量)
只能通过 自己的函数参数中的本类对象,全局变量中的本类对象,以及局部变量中的本类对象,来访问非静态成员(成员函数和成员变量)
换言之,非静态成员
或者隐性的通过 this 指针(直接写成员的名字);
或者显式的通过本类对象(指针,引用)访问.

假设有一个类 A
   class A{
     
public:
  void f(){};
  int x;
  };
定义一个对象,一个引用,一个指针,如下; 
A a;
A *p=&a;
A &ref=a;

    x  ;  // 非静态成员函数,访问成员变量,可以这么做.
    f();  // 非静态成员函数,访问成员函数,可以这么做.
    
    a.x; ref.x;     // 对象,引用,访问成员变量,任何对 x有访问权的函数,可以这样做;