static函數是不能被其他文件直接調用的,可以用間接的方式。
方法一:通過非static函數的方式,我們可以定義一個普通的函數,讓這個普通函數調用static函數,然后在把這個普通函數在頭文件中聲明。
(1.cpp) #include #include "2.h" void main() { struct stru stru1; use_my_static(&stru1); stru1.f(); }
(2.cpp) #include "2.h" #include static void my_static() { printf("我是外邊的static的函數,我被調用了\n"); } void use_my_static(struct stru *h) { h->f=my_static; };
2.h頭文件 static void my_static(); struct stru{ void (*f)(); }; void use_my_static(struct stru *h);
方法二:通過函數指針的方式, 我們只要得到這個函數的地址,那么就一定可以調用它,大家要知道static函數是對編譯器起作用的,在運行時根本沒有static了,有的只是函數地址,所以只要搞到函數地址管它是不是static的照調不誤。
class Hack { private: int x; public: int get_x(); static void func(Hack * pthis); // 靜態成員函數 void func2(); // 非靜態成員函數 }; void Hack::func(Hack * pthis) { int y = pthis->get_x(); // 訪問對象的數據成員 }
回答所涉及的環境:聯想天逸510S、Windows 10。
static函數是不能被其他文件直接調用的,可以用間接的方式。
方法一:通過非static函數的方式,我們可以定義一個普通的函數,讓這個普通函數調用static函數,然后在把這個普通函數在頭文件中聲明。
方法二:通過函數指針的方式, 我們只要得到這個函數的地址,那么就一定可以調用它,大家要知道static函數是對編譯器起作用的,在運行時根本沒有static了,有的只是函數地址,所以只要搞到函數地址管它是不是static的照調不誤。
回答所涉及的環境:聯想天逸510S、Windows 10。