我正在尝试运行一个访问3个不同类的main.cpp。出于某种原因,我得到一个未解决的外部符号错误。从我在网上看到的,它显然是一个链接错误,但我找不到它。我已经列出了下面的错误,但它有很多信息,我很难找到它的确切含义。
错误:main.obj:-1:错误:LNK2001:未解析的外部符号“public:__thiscall AtpReader :: AtpReader(class std :: basic_string,class std :: allocator>)”(?? 0AtpReader @@ QAE @ V'$ basic_string的@ DU?$ char_traits @ d @ @@ STD V'$分配器@ d @ @@ 2 STD @@@ 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 :(得分:1)
尝试在linux终端中使用g++
制作每个源代码的目标文件,然后链接目标文件并运行可执行文件
g++ -c atp.cpp AtpReader.cpp AtlasObject.cpp
g++ -o exe atp.o AtpReader.o AtlasObject.o
./exe
答案 1 :(得分:1)
AtpReader.cpp
未构建或其目标文件未链接到最终可执行文件。检查是否在构建目录中创建了AtpReader.obj / .o。
答案 2 :(得分:1)
我看到你没有在AtpReader.cpp中包含AtpReader.h,但是当你复制/粘贴时,你可能只是错过了它,把它插入到这里,因为如果你没有真正包含它,那么错误就是不同。另外,我看到你在main.cpp中都包含了“atlasobject.h” 和“atp.h”,你真的不需要那个。
稍后编辑:您的问题在atp.h ...您的构造函数已声明但从未定义。这样做:ATP(){};
答案 3 :(得分:0)
由于您遇到链接器错误,并假设这是您的一些实际代码。由于我看不到任何函数内联,全局常量或变量在范围之外使用我认为问题位于AtpReader.cpp中,你错过了#include AtpReader.h
吗?
只使用函数原型,编译器可以继续而不会出错,但链接器无法解析对地址的调用,因为没有保留功能代码或变量空间。在创建对链接器必须解析的函数的调用之前,您不会看到此错误。