提问人:Herith12 提问时间:2/17/2015 最后编辑:Herith12 更新时间:2/17/2015 访问量:186
我的配置类的未解析外部符号 (C++)
Unresolved External Symbol with my Config Class (C++)
问:
我看了很多关于这个话题的帖子,但没有一个有帮助。我仍然无法弄清楚我做错了什么。请帮忙!
我收到此错误:
main.obj:-1: error: LNK2019: unresolved external symbol "public: __thiscall Config::Config(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (??0Config@@QAE@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) referenced in function _main
这是我所拥有的代码。我从代码中剥离了所有内容,试图弄清楚这一点;这非常简单。
我的 Config.h 文件
#ifndef CONFIG_H
#define CONFIG_H
#include <string>
class Config{
public:
Config(std::string file_name);
};
#endif
这是我的 Config.cpp 文件
//Config class
#include "Config.h"
#include <string>
Config::Config(std::string file_name){
//Do stuff
}
这是我尝试使用它的地方
Config c("test");
即使经过一个小时阅读文章和线程,我也无法弄清楚这一点。
答:
2赞
paxdiablo
2/17/2015
#1
确保您确实在文件(或其等效对象文件)中进行了链接。如果您只执行主文件。您将收到这样的“未解决”错误。Config.cpp
例如,对于以下文件:
Config.h :
#ifndef CONFIG_H
#define CONFIG_H
#include <string>
class Config{
public:
Config(std::string file_name);
};
#endif
Config.cpp:
#include "Config.h"
#include <string>
Config::Config(std::string file_name){}
Main.cpp:
using namespace std;
#include "Config.h"
int main() {
Config c("test");
return 0;
}
编译和链接这两部作品:
pax> g++ -o Main Main.cpp Config.cpp
但是不这样做会导致错误:Config.cpp
pax> g++ -o Main Main.cpp
/tmp/cc8GYPy2.o: In function `main':
Main.cpp:(.text+0x42): undefined reference to
`Config::Config(std::string)'
collect2: error: ld returned 1 exit status
当您使用命令行编译器时,这很容易辨别,因为从命令行中可以立即看出发生了什么。
在 IDE 中,它可能没有那么简单,但通常归结为确保 CPP 源文件是项目的一部分并将被构建。
测试它是否是:从主 CPP 文件中注释掉当前有问题的行,并将其添加到:Config.cpp
int main() { return 0;}
如果它实际上正在构建中,您应该会看到一个错误,抱怨重复的符号。main
评论
0赞
Herith12
2/17/2015
所以你是说我没有编译这两个文件?
0赞
paxdiablo
2/17/2015
@Herith12,不行,因为我无法从这里访问您的系统。我要说的是,您应该检查/确保将这两个文件编译并链接在一起。据我所知,这可能是QtCreator中的一个错误,或者有人用恶作剧程序替换了你的编译器,或者你一直在参与非法物质。所有这些都比我假设的可能性要小,但我的确定性水平还没有完全达到 100% :-)
评论