错误:"班级名称"没有命名类型

时间:2018-01-26 05:07:43

标签: c++ class

运行main.cpp时出现此问题。有一堆类.h和.cpp文件,由于某种原因我只是得到这个错误。

#ifndef Region_H
#define Region_H

#include "Stat.h"
#include "Day.h"
#include "Station.h"
#include "Analyzer.h"
#include "Region.h"

class Region {
    private:
        Station*        _stations[MAX_STATION_COUNT];
        int             _stationCount=0;
        int             _currentStation;

    public:
        Region();
        void load(std::ifstream &input);
        void resetStationIteration();
        Station* getNextStation();
        Station* findStation(std::string& id);

    private:
        Station* addStation(std::string& id, std::string& name);
};
#endif

这不是我编写的代码,但我试图将其重新组织成单独的文件,但是当我完成并尝试运行它时,我一直收到此错误。不知道为什么。任何帮助表示感谢。

#ifndef Station_H
#define Station_H

#include "Stat.h"
#include "Day.h"
#include "Station.h"
#include "Analyzer.h"
#include "Region.h"

class Station {
    private:
        std::string         _id;
        std::string         _name;
        Day*               _days[MAX_DAYS];
        int                 _dayCount = 0;
        int                 _currentDay = -1;

    public:
        Station(std::string& id, std::string& name);
        void load(std::string& datetime, std::string& qgag, std::string& qpcp);
        void resetDayIteration();
        Day* getDayNext();

        std::string getId();
        std::string getName();

    private:
        Day* findDay(std::string& date);
        Day* addDay(std::string& date);
};
#endif

还有另一个名为station的类,所以这应该可行,不知道为什么它不会。请告诉我是否需要在c ++中添加更多代码或详细信息,因此需要大量帮助。

这是站类.h文件

Running /home/ubuntu/workspace/cs1440-hw2/main.cpp
/tmp/ccxaejI8.o: In function `main':
main.cpp:(.text+0x1e0): undefined reference to `Region::Region()'
main.cpp:(.text+0x1f9): undefined reference to `Region::load(std::basic_ifstream<char, std::char_traits<char> >&)'
main.cpp:(.text+0x264): undefined reference to `Region::findStation(std::string&)'
main.cpp:(.text+0x28e): undefined reference to `Analyzer::analyze(Station*)'
main.cpp:(.text+0x2ae): undefined reference to `Region::resetStationIteration()'
main.cpp:(.text+0x2c9): undefined reference to `Analyzer::analyze(Station*)'
main.cpp:(.text+0x2d8): undefined reference to `Region::getNextStation()'
collect2: error: ld returned 1 exit status


Process exited with code: 1

好的感谢所有已回答的问题到目前为止我已经使用了所有的建议并修复了一些错误,但是,在尝试运行我的主要功能时我得到了这个错误:

#include <fstream>
#include <iostream>
#include <sstream>
#include <string>

#include "Analyzer.h"
#include "Region.h"

#define MAX_DAYS          365
#define MAX_STATS         100
#define MAX_STATION_COUNT 20

bool split(const std::string& s, char delimiter, std::string elements[], int expectedNumberOfElements) {
    std::stringstream ss;
    ss.str(s);
    std::string item;

    int i=0;
    while (std::getline(ss, item, delimiter) && i<expectedNumberOfElements) {
        elements[i++] = item;
    }
    return (i==expectedNumberOfElements);
}

int main(int argc, char* argv[]) {
    if (argc>1) {
        std::ifstream inputStream(argv[1], std::ios_base::in);

        Region region;
        region.load(inputStream);

        Analyzer analyzer;

        if (argc>2) {
            std::string stationId(argv[2]);
            Station* station = region.findStation(stationId);
            if (station!= nullptr)
                analyzer.analyze(station);
        }
        else {
            region.resetStationIteration();
            Station *station;
            while ((station = region.getNextStation()) != nullptr)
                analyzer.analyze(station);
        }
    }

    return 0;
}

这是主文件,所以你们可以得到更好的结果:

{
    "thing": "name",
    "params": {
        "foo": 45.5,
        "key": "value"
    }
}

1 个答案:

答案 0 :(得分:-1)

问题在于你的通告#include

Station.h的第一部分读取

#include "Region.h"

class Station {

然后Region.h包含在那里,然后再次包含Station.h。在嵌套的#include处,宏条件#ifndef Station_H失败,因此没有Station可用的声明。

我建议您从两个头文件中删除彼此的包含,并在真正需要的情况下为类提供前向声明,如Daniel H pointed out in comments

class Station; // Put in Region.h
class Region;  // Put in Station.h

这声明了Station类的存在,并希望消除你所面临的错误。