0

コンパイラがクラス内の関数でエラーをスローしていますが、vecListAtt connFrFile(int file_ext);その理由がわかりません。エラーは言う

「エラー:宣言は「vecListAttneighborAtt :: connFrFile(intfile_ext)」と互換性がありません(connectivity.hで宣言されています)」

connection.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

connection.cppで、私は定義します

vecListAtt neighborAtt::connFrFile(int file_ext)
{

    vecListAtt node_and_info;

    return node_and_info;
}
4

3 に答える 3

0

これを変える

vecListAtt connFrFile(int file_ext);

vecListAtt *connFrFile(int file_ext);

またはのヘッダーファイルをインクルードしますvecListAtt

于 2013-03-25T05:07:24.150 に答える
0

コードの最初の問題は、class neighborAtt定義中です。
クラスが次のように前方宣言されている場合:

class vecListAtt;

その場合、そのコンテキストで使用できるのは、そのクラスのポインターまたは参照のみです。

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

変更すると、すべてのエラーがなくなります。もう1つの方法は、を含むヘッダーファイルをインクルードすることvecListAttです。

于 2013-03-25T05:07:30.103 に答える
0

neighborAttクラスを作成する際、コンパイラはこのクラスに必要なスペースを知る必要があります。これで、実装では、コンパイラはneighborAttオブジェクトのサイズを計算するためにvecListAttオブジェクトのサイズを必要とするため、vecListAttの前方宣言のみがここでは機能しません。完全なvecListAttクラスを定義するか、vecListAttのポインターを持つことができるneighborAttクラスを変更します。コンパイラは、vecListAttのポインタが取ることができるサイズを認識しています。

于 2013-03-25T07:56:51.050 に答える