2014-12-03 101 views
1

我在B類和D類中有一個成員函數,它調用函數'computeValue',它不是任何類的成員函數。 'computeValue'函數執行某種類型的算法並返回一個值。但是,似乎我收到了很多編譯錯誤,並不確定其根本原因。類的成員函數甚至有可能調用非成員函數嗎?讓類成員函數調用類之外的函數

#include<iostream> 
using namespace std; 


int computeValue(vector<A*>ex) //Error - Use of undeclared identifier 'A' 
{ 
    //implementation of algorithm 
} 

class A 
{ 

}; 

class B 
{ 

    int sam2() 
    { 
     return computeValue(exampleB); // Error - No matching function for call to 'computeValue       
    } 
    vector <A*> exampleB; 

}; 

class D 
{ 
    int sam1() 
    { 
     return computeValue(exampleD);// Error - No matching function for call to 'computeValue 
    } 
    vector<A*> exampleD; 
}; 

int main() 
{ 

} 

回答

1

computeValue需要A類的聲明,所以才宣佈A

class A 
{ 
}; 

int computeValue(vector<A*>ex) 
{ 
    //implementation of algorithm 
} 

它甚至有可能爲類的成員函數調用非成員函數?

是的,是的。

0

是的,絕對可以從類中調用類非成員函數。

這裏你得到錯誤,因爲主要有兩個問題:

  1. 您正在使用矢量,但你還沒有宣佈在你的代碼矢量頭文件。 #include<vector>

  2. 您正在使用A類指針作爲其在類A. 之前定義因此,無論功能還是使用預先聲明的概念之前定義A級參數的功能「computeValue」。

這裏沒有錯誤修改後的代碼:

#include<iostream> 
#include<vector> 

using namespace std; 

**class A; //forward declaration of Class A** 

int computeValue(vector<A*> ex) //Error - Use of undeclared identifier 'A' 
{ 
    //implementation of algorithm i 
     return 5; 
} 

class A 
{ 

}; 

class B 
{ 

    int sam2() 
    { 
     return computeValue(exampleB); // Error - No matching function for call to 'computeValue 
    } 
    vector <A*> exampleB; 

}; 

class D 
{ 
public: 

     D() 
     { 
       cout<<"D constructor"<<endl; 
     } 

    int sam1() 
    { 
     return computeValue(exampleD);// Error - No matching function for call to 'computeValue 
    } 
    vector<A*> exampleD; 
}; 

int main() 
{ 
    D d; 
} 

這個代碼將會給你輸出:「d構造」 我希望這會幫助你。