我的配置类(C ++)中未解析的外部符号

时间:2015-02-17 01:25:31

标签: c++ qt qt-creator unresolved-external

我已经看了很多关于这个主题的帖子,但没有一个帮助过。我仍然无法弄清楚我做错了什么。请帮忙!

我收到此错误:

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");

即使经过一个小时的阅读文章和帖子,我也无法想象我的生活。

1 个答案:

答案 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符号。