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