0

编译器在类中抛出我的函数错误,我vecListAtt connFrFile(int file_ext);不知道为什么。错误说

“错误:声明与“vecListAtt neighborAtt::connFrFile(int file_ext)”不兼容(在连接性.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

在connectivity.cpp中,我定义

vecListAtt neighborAtt::connFrFile(int file_ext)
{

    vecListAtt node_and_info;

    return node_and_info;
}
4

3 回答 3

0

在创建neighborAtt 类时,编译器需要知道你要为这个类占用多少空间。现在,在您的实现中,编译器将需要 vecListAtt 对象的大小来计算 neighborAtt 对象的大小,因此只有 vecListAtt 的前向声明在这里不起作用。您定义完整的 vecListAtt 类或更改可以具有 vecListAtt 指针的 neighborAtt 类。编译器知道 vecListAtt 的指针可以占用多少大小。

于 2013-03-25T07:56:51.050 回答
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
};

一旦你改变它,所有的错误都会消失。另一种选择是包含包含vecListAtt.

于 2013-03-25T05:07:30.103 回答