2013-03-25 60 views
0

編譯器在函數vecListAtt connFrFile(int file_ext);中拋出一個錯誤,我不知道爲什麼。錯誤說在類體外定義類方法時出錯

「錯誤:聲明是不兼容 」vecListAtt neighborAtt :: connFrFile(INT file_ext)「(在connectivity.h申報)」

connectivity.h:

#if !def connectivity_H 
#define connectivity_H 

#include <iostream> 
#include <vector> 
#include <list> 
#include <string> 
#include <sstream> 
#include <fstream> 

class listAtt; 
class vecListAtt; 

class neighborAtt 
{ 
public: 
    neighborAtt(); //default constructor 
    neighborAtt(int neighbor_id, int att_1, int att_2); 


    vecListAtt connFrFile(int file_ext); 
    vecListAtt makeList(std::vector<std::list<neighborAtt>> nodeAndInfo, int nodeID, neighborAtt neighAndAtt); 
    neighborAtt getAtt(std::string currentLine); 

private: 
    int neighborID; 
    int attribute1; 
    int attribute2; 
}; 

typedef std::list<neighborAtt> listAtt; 
typedef std::vector<listAtt> vecListAtt; 

#endif 

在連接的.cpp,我定義

vecListAtt neighborAtt::connFrFile(int file_ext) 
{ 

    vecListAtt node_and_info; 

    return node_and_info; 
} 

回答

0

在你的代碼的第一個問題是頭文件。
如果一個類被向前聲明如:

class vecListAtt; 

那麼只有一個指針或該類的參考可以在上下文中使用。

class neighborAtt { 
    vecListAtt connFrFile(int file_ext); 
//^^^^^^^^^^ should be pointer or reference 
}; 

一旦你改變它,所有的錯誤都會消失。另一種選擇是包含頭文件,其中包含vecListAtt

0

改變這種

vecListAtt connFrFile(int file_ext); 

vecListAtt *connFrFile(int file_ext); 

或包括class neighborAtt定義期間vecListAtt

0

在創建neighborAtt類編譯器時,需要知道爲這個類需要佔用多少空間。現在在你的實現中,編譯器將需要vecListAtt對象的大小來計算neighborAtt對象的大小,所以只有vecListAtt的前向聲明在這裏不起作用。要麼定義完整的vecListAtt類,要麼更改可以具有vecListAtt指針的neighborAtt類。編譯器知道vecListAtt的指針可以採用多少大小。