我已经看了很多关于这个主题的帖子,但没有一个帮助过。我仍然无法弄清楚我做错了什么。请帮忙!
我收到此错误:
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");
即使经过一个小时的阅读文章和帖子,我也无法想象我的生活。
答案 0 :(得分:2)
确保您实际链接Config.cpp
文件(或其等效的目标文件)。如果您只执行主文件。你会得到一个未解决的&#39;这样的错误。
例如,使用文件:
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
符号。