编译器在类中使用函数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
在connectivity.cpp中,我定义了
vecListAtt neighborAtt::connFrFile(int file_ext)
{
vecListAtt node_and_info;
return node_and_info;
}
答案 0 :(得分:0)
更改此
vecListAtt connFrFile(int file_ext);
到
vecListAtt *connFrFile(int file_ext);
或包含vecListAtt
答案 1 :(得分:0)
代码中的第一个问题是在class neighborAtt
定义期间
如果一个类是前向声明的,例如:
class vecListAtt;
然后,只能在该上下文中使用该类的指针或引用。
class neighborAtt {
vecListAtt connFrFile(int file_ext);
//^^^^^^^^^^ should be pointer or reference
};
更改后,所有错误都会消失。另一种方法是包含包含vecListAtt
的头文件。
答案 2 :(得分:0)
创建neighborAtt类编译器时需要知道要为此类占用多少空间。现在在您的实现中,编译器将需要vecListAtt对象的大小来计算neighborAtt对象的大小,因此只有vecListAtt的转发声明在此处不起作用。您可以定义完整的vecListAtt类,也可以更改可以具有vecListAtt指针的neighborAtt类。编译器知道vecListAtt的指针可以采用多大的大小。