1 靜態成員函數相當於全局函數,只有一個類名字空間的限制。靜態成員函數是類的函數,無需指明是某個實例對象在操作,既可以是類在調用其靜態成員函數也可以是其實例對象來調用。注:靜態成員函數只能訪問靜態成員變量和靜態成員函數。
2 類成員函數式成員內部的函數,同一個類的對象實例有很多,每一個實例都有自己不同的成員變量值。每個實例通過成員函數來操作其成員變量。所以成員函數的調用必須明確的指出是哪一個實例對象在操作。注:類成員函數當然也可以訪問靜態成員變量或者靜態成員函數。
- class Test
- {
- public:
- int f()
- {
- cout << "member function" << endl;
- }
- static int g()
- {
- cout << "static member function" << endl;
- }
- public:
- enum
- {
- size_f = sizeof(f()), // error, 非靜態成員函數的非法調用
- size_g = sizeof(g()) // ok
- };
- };
- int main()
- {
- Test::g(); // ok
- Test::f(); // error,非靜態成員函數的非法調用
- Test t;
- t.g(); // ok
- t.f(); // ok
- }
- 如果想要調用非靜態成員函數的解決方法:
- 解決方案1:
-
f()
是一個成員函數,需要使用對象來調用
像這樣 - Test test;
- F.f();
解決方案2:
你的f是個非靜態成員函數,需要用一個對象來調用
比
Test F();
F.f();
以上介紹了“ error C2352 : 非靜態成員函數的非法調用”的問題解答,希望對有需要的網友有所幫助。