Неразрешенный внешний символ при создании объекта

Я пытаюсь запустить main.cpp, который имеет доступ к 3 различным классам. По какой-то причине я получаю неразрешенную внешнюю ошибку символа. Из того, что я видел в Интернете, это явно ошибка где-то, но я не могу ее найти. Я перечислил ошибку ниже, но в ней много информации, и я не могу точно понять, что это значит.

Ошибка: main.obj: -1: ошибка: LNK2001: неразрешенный внешний символ «public: __thiscall AtpReader :: AtpReader (класс std :: basic_string, класс std :: allocator>)» (?? 0AtpReader @@ QAE @ V? $ basic_string @ DU? $ char_traits @ D @ станд @@ V? $ распределитель @ D @ 2 @@ станд @@@ Z)

Мой код:

main.cpp:

#include <iostream>
#include "atlasobject.h"#include "atp.h"#include "atpreader.h"using namespace std;
int main()
{
AtpReader reader("E:/doc.txt");
return 0;
}

AtpReader.h:

#ifndef ATPREADER_H
#define ATPREADER_H
#include "atp.h"
class AtpReader
{
public:
AtpReader();
AtpReader(string filename);

void atpReadHeader();
void atpRead();
string decryptLine(string line);

ATP readerATP;

private:
string file;
};
#endif // ATPREADER_H

atp.h:

#ifndef ATP_H
#define ATP_H
#include "atlasobject.h"#include "vector"
struct Image{
string Dim;
string Vox;
string Ori;
char* data;
};

class ATP
{
public:
ATP();
vector<AtlasObject> listOfMaps;

private:
Image referenceImage;
};
#endif // ATP_H

и AtlasObject.h:

#ifndef ATLASOBJECT_H
#define ATLASOBJECT_H
#include <string>

using namespace std;
class AtlasObject{

public:
//virtual void create();
AtlasObject();

void set_uid(string id);
void set_label(string l);
void set_offset(string o);
void set_mapInfo(string info);
void set_data(char* inData);
void set_isEncrypted(int encrypted);

string get_uid();
string get_label();
string get_offset();
string get_mapInfo();
char* get_data();
int get_isEncrypted();

protected:
string uid;
string label;
string offset;
string mapInfo;
char *data;
int isEncrypted;
};
#endif // ATLASOBJECT_H

мой AtpReader.cpp это:

#include "atpreader.h"
#include <iostream>
#include <fstream>
#include <stdint.h>
#include <sstream>

AtpReader::AtpReader()
{
printf("AtpReader()\n");
}

AtpReader::AtpReader(string filename)
{
printf("AtpReader(%s)\n",filename.c_str());
}

0

Решение

Я вижу, что вы не включили AtpReader.h в AtpReader.cpp, но, возможно, вы просто пропустили его, когда делали копирование / вставку, чтобы вставить его сюда, потому что, если бы вы его не включили, ошибка была бы другой. Кроме того, я вижу, что вы включаете в свой main.cpp и «atlasobject.h», и «atp.h», и вам это действительно не нужно.

Позднее редактирование: ваша проблема в atp.h … ваш конструктор объявлен, но никогда не определен. Сделайте это: ATP () {};

1

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

Попробуйте использовать g++ в терминале Linux
сделать объектные файлы каждого из исходных кодов, а затем связать объектные файлы и запустить исполняемый файл

g++ -c atp.cpp AtpReader.cpp AtlasObject.cpp
g++ -o exe atp.o AtpReader.o AtlasObject.o
./exe
1

AtpReader.cpp не создается или его объектный файл не связывается с конечным исполняемым файлом. Проверьте, создан ли AtpReader.obj / .o в каталоге сборки.

1

Из-за ошибки компоновщика вы получаете и предполагаете, что это часть вашего реального кода. Так как я не вижу встраивания какой-либо функции, глобальных констант или переменных, находящихся вне области видимости, я думаю, что проблема находится в AtpReader.cpp, вам не хватает #include AtpReader.h там?

Имея только прототип функции, компилятор может продолжить работу без ошибок, но компоновщик не может разрешить вызов по адресу, потому что не зарезервирован ни код функции, ни пространство переменных. Вы не увидите эту ошибку, пока не создадите вызов функции, которую должен решить компоновщик.

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