Неразрешенный внешний символ, даже если он определен?

Я не использую никаких шаблонов, и это не статический класс или функция, поэтому я абсолютно не понимаю, почему он выдает ошибку LNK2001, когда она определена.
Вот полная ошибка:

1>mapgenerator.obj : error LNK2019: unresolved external symbol "private: class std::vector<int,class std::allocator<int> > __thiscall MapGenerator::Decode(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?Decode@MapGenerator@@AAE?AV?$vector@HV?$allocator@H@std@@@std@@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@3@@Z) referenced in function "private: void __thiscall MapGenerator::GenerateTileLayer(class TiXmlNode *)" (?GenerateTileLayer@MapGenerator@@AAEXPAVTiXmlNode@@@Z)

Мой класс MapGenerator;

class MapGenerator
{
public:
//Constructor and destructor
MapGenerator(std::string tmxfile) : doc(tmxfile.c_str()) { Load(); }
~MapGenerator();

//Loads in a new TMX file
void Load();

//Returns a map
void GetMap();//Reads the TMX document
void Read();private:
//The TMX document
TiXmlDocument doc;//Generates a tile layer
void GenerateTileLayer(TiXmlNode* node);

//Generates a tileset
void GenerateTileset(TiXmlNode* node);

//Generates an Object Layer
void GenerateObjectLayer(TiXmlNode* node);

//Generates a Map Object(Goes in the object layer)
void GenerateObject(TiXmlNode* node);

//Decodes the data
std::vector<int> Decode(std::string data);

bool loadOkay;};

И сопутствующее определение в .cpp,

std::vector<int> Decode(std::string data)
{
//Represents the layer data
std::vector<int> layerdata;

//Decodes the data
data = base64_decode(data);

//Shift bits
for(unsigned int i = 0; i < data.size(); i+=4)
{
const int gid = data[i] |
data[i + 1] << 8 |
data[i + 2] << 16 |
data[i + 3] << 24;

//Add the resulting integer to the layer data vector
layerdata.push_back(gid);

}

//Return the layer data vector
return layerdata;
}

Я вызываю функцию, как это,

std::string test(node->FirstChild("data")->Value());
data = Decode(test);

Я не уверен, почему это жалуется, когда все выглядит уместно.
Кстати, я попытался заставить функцию принять const char * const вместо std :: string, поскольку именно это возвращает Value (), но я все еще получаю ошибку LNK2001.
Есть идеи?

1

Решение

 std::vector<int> Decode(std::string data)

должен иметь имя класса с :: оператор разрешения области.

 std::vector<int> MapGenerator::Decode(std::string data)
//^^^^^

Поскольку это функция-член MapGenerator учебный класс.

5

Другие решения

Ты должен сделать :

std::vector<int> MapGenerator::Decode(std::string data)
{
4

По вопросам рекламы [email protected]