C ++向量问题-'LNK2001:无法解析的外部符号私有:静态...' [英] C++ vector issue - 'LNK2001: unresolved external symbol private: static...'
问题描述
在有人叫我不考虑先前存在的问题之前,我已经看过并意识到这与声明有关,但我仍然无法使它起作用(可能与使用矢量的方式有关)).
Before anyone calls me out for not looking at pre-existing questions, I have looked and realise that it is to do with declaration, but I still can't get it to work (might be something to do with me using vectors).
Manager.h:
Manager.h:
#include "Flight.h"
#ifndef manager_h
#define manager_h
class Manager {
static vector<Airport> airports;
static vector<Flight> flights;
public:
static void loadAirports();
static void loadFlights();
static Airport getAirport(string code);
static vector<string> split(const string &s, vector<string> &elems);
};
#endif
Manager.cpp:
Manager.cpp:
#include "Manager.h"
void Manager::loadAirports ()
{
ifstream airportfile("airports.txt");
string line;
while (getline(airportfile, line))
{
vector<string> values;
split(line, values);
Airport airport (values[0], values[1], atoi(values[2].c_str()));
airports.push_back(airport);
}
}
void Manager::loadFlights ()
{
ifstream flightfile("flights.txt");
string line;
while (getline(flightfile, line))
{
vector<string> values;
split(line, values);
Flight flight (getAirport(values[0]), getAirport(values[1]), atoi(values[2].c_str()), atoi(values[3].c_str()));
flights.push_back(flight);
}
cout << flights.size() << endl;
}
Airport Manager::getAirport (string code)
{
for (int i = 1; i < (int)airports.size(); i++)
{
if (airports[i].code == code)
return airports[i];
}
throw exception();
}
vector<string> Manager::split(const string &s, vector<string> &elems) {
stringstream ss(s);
string item;
while(getline(ss, item, ',')) {
elems.push_back(item);
}
return elems;
}
它抛出此错误:
Manager.obj:错误LNK2001:未解析的外部符号专用:静态结构向量经理::机场"(?airports @ Manager @@ 0U?$ Vector @ UAirport @@@@@ A)
Manager.obj : error LNK2001: unresolved external symbol "private: static struct Vector Manager::airports" (?airports@Manager@@0U?$Vector@UAirport@@@@A)
Manager.obj:错误LNK2001:未解析的外部符号专用:静态结构向量经理::航班"(?flights @ Manager @@ 0U?$ Vector @ UFlight @@@@@ A)
Manager.obj : error LNK2001: unresolved external symbol "private: static struct Vector Manager::flights" (?flights@Manager@@0U?$Vector@UFlight@@@@A)
我意识到我需要定义向量,但是如何以及在哪里?我尝试创建一个空的构造函数,然后做
I realise i need to define the vectors, but how and where? I tried creating an empty constructor and then doing
Manager::Manager ()
{
vector<string> flights;
vector<string> airports;
}
但这只是给了我一个重新定义错误.
But it just gave me a re-definition error.
推荐答案
您必须在 .cpp
文件中定义它们:
You have to define them in the .cpp
file:
vector<string> Manager::flights;
vector<string> Manager::airports;
这篇关于C ++向量问题-'LNK2001:无法解析的外部符号私有:静态...'的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!