创建对象时未解析的外部符号
Unresolved External Symbol while creating an object
我正在尝试运行一个 main.cpp它访问 3 个不同的类。 由于某种原因,我收到一个未解决的外部符号错误。从我在网上看到的情况来看,它显然是某处的链接错误,但我找不到它。 我在下面列出了错误,但它有很多信息,我很难确切地找到它的含义。
错误: main.obj:-1: 错误: LNK2001: 未解析的外部符号 "public: __thiscall AtpReader::AtpReader(class std::basic_string,class std::分配器>)" (??0AtpReader@@QAE@V?$basic_string@DU?$char_traits@D@D@std@@V?$allocator@D@2@@std@@@Z)
我的代码是:
主.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());
}
我看到你没有在AtpReader.cpp中包含AtpReader.h,但可能你在进行复制/粘贴时错过了它,把它插入到这里,因为如果你没有真正包含它,错误会有所不同。另外,我看到您在主要内容中都包含"atlasobject.h.cpp和"ATP.H",你真的不需要它。
后来编辑:你的问题出在 atp.h...构造函数已声明,但从未定义。这样做: ATP(){};
尝试在 Linux 终端中使用 g++
制作每个源代码的目标文件,然后链接目标文件并运行可执行文件
g++ -c atp.cpp AtpReader.cpp AtlasObject.cpp
g++ -o exe atp.o AtpReader.o AtlasObject.o
./exe
AtpReader.cpp
未生成或其对象文件未链接到最终可执行文件。检查是否在构建目录中创建了 AtpReader.obj/.o。
由于您收到的链接器错误,并假设这是您的一些实际代码。由于我看不到任何函数内联、全局常量或变量在范围之外使用,我认为问题出在 AtpReader .cpp中,您是否在那里缺少#include AtpReader.h
?
只需一个函数原型,编译器就可以继续而不会出错,但链接器无法解析对地址的调用,因为没有保留函数代码或变量空间。在创建对链接器必须解析的函数的调用之前,不会看到此错误。
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- 未解析的外部符号_MsiLocateComponentW@12.
- 在C++中使用 gRPC 时未解析的外部符号
- LibPrivoxy: 未解析的外部符号 __declspec(dllimport) int __stdcall Sta
- 尝试从 XamlApplication 编译 C++/WinRT 空白应用程序时,我收到未解析的外部符号 winrt_make_*
- 我收到错误LNK2001:未解析的外部符号(C++代码)
- 可视抽象类 c++(错误 LNK 2001:未解析的外部符号)
- 如何摆脱C++中未解析的外部符号"private: static char"错误?
- 当 lib 已添加到其他依赖项时,如何在 VS 中调试未解析的外部符号错误
- 仅在少数方法(静态或共享库)中解析的外部符号
- 未解析的外部符号"__declspec(dllimport)与 Spdlog c++ 库
- 函数 _main (OPENGL C++) 中引用的未解析的外部符号 ________
- 错误LNK2019未解析的外部符号"public: __thiscall SLinkList<char>::SLinkList<char>(void)"
- 使用静态 constexpr 成员的未解析外部符号
- 引入参数化构造函数后显示 LNK 2019 未解析外部符号的代码错误
- Dlib LNK2001未解析的外部符号USER_ERROR__consistent_build_configurati
- 矛盾的未解决的外部符号+未使用的库与VS2017和FFMPEG 4
- 链接器错误:切换到unicode生成给出:未解析的外部符号WinMain
- 类模板上一个特定函数的未解析外部符号
- LNK2001:未解析的外部符号public:static类std::vector