#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"
}
}
答案 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
类的存在,并希望消除你所面临的错误。