非靜態成員函數的非法調用

1 靜態成員函數相當於全局函數,只有一個類名字空間的限制。靜態成員函數是類的函數,無需指明是某個實例對象在操作,既可以是類在調用其靜態成員函數也可以是其實例對象來調用。注:靜態成員函數只能訪問靜態成員變量和靜態成員函數。

2 類成員函數式成員內部的函數,同一個類的對象實例有很多,每一個實例都有自己不同的成員變量值。每個實例通過成員函數來操作其成員變量。所以成員函數的調用必須明確的指出是哪一個實例對象在操作。注:類成員函數當然也可以訪問靜態成員變量或者靜態成員函數。

  1. class Test  
  2. {  
  3. public:  
  4.     int f()   
  5.     {  
  6.         cout << "member function" << endl;  
  7.     }  
  8.     static int g()  
  9.     {  
  10.         cout << "static member function" << endl;  
  11.     }  
  12. public:  
  13.     enum   
  14.     {  
  15.         size_f = sizeof(f()), // error, 非靜態成員函數的非法調用  
  16.         size_g = sizeof(g())  // ok  
  17.     };  
  18.       
  19. };  
  20. int main()  
  21. {  
  22.     Test::g(); // ok  
  23.     Test::f(); // error,非靜態成員函數的非法調用  
  24.     Test t;  
  25.     t.g();     // ok  
  26.     t.f();     // ok  
  27. }  
  28. 如果想要調用非靜態成員函數的解決方法:
  29. 解決方案1:
  30. f()
    是一個成員函數,需要使用對象來調用
    像這樣
  31. Test test;
  32. F.f();

解決方案2:

你的f是個非靜態成員函數,需要用一個對象來調用

Test F();

F.f();
       


以上介紹了“ error C2352 : 非靜態成員函數的非法調用”的問題解答,希望對有需要的網友有所幫助。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章