在类体外定义类方法时出错

时间:2013-03-25 05:03:50

标签: c++ class header-files

编译器在类中使用函数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;
}

3 个答案:

答案 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的指针可以采用多大的大小。