C++ 在类主体外部定义类方法时出错

C++ 在类主体外部定义类方法时出错,c++,class,header-files,C++,Class,Header Files,编译器在myfunctionvecListAtt connfrffile(int file\u ext)中抛出一个错误

编译器在myfunction
vecListAtt connfrffile(int file\u ext)中抛出一个错误
错误:声明与“vecListAtt neighborAtt::connfrffile(int file_ext)”不兼容(在connectivity.h声明)

连通性.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
改变这个

vecListAtt connFrFile(int file_ext);


或者包含
vecListAtt的头文件
代码中的第一个问题是在
类定义期间。
如果类是向前声明的,例如:

class vecListAtt;
那么在该上下文中只能使用该类的指针或引用

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

一旦你改变它,所有的错误都会消失。另一种选择是在创建Neighbratt类时包含包含
vecListAtt

的头文件。编译器需要知道该类将占用多少空间。现在,在您的实现中,编译器将需要vecListAtt对象的大小来计算neightratt对象的大小,所以只有vecListAtt的前向声明在这里不起作用。可以定义完整的vecListAtt类,也可以更改可以具有vecListAtt指针的相邻类。编译器知道vecListAtt指针的大小

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