未解析的外部符号,具有极其简单的类(VS2010)

时间:2012-12-05 00:16:58

标签: c++ visual-studio-2010 linker-errors unresolved-external lnk2019

我完全相信这是一个非常基本的事情,每个活着的人都能完美地表现,但不知怎的,它对我不起作用。常见问题以及通过Google找到的许多其他主题/问题都没有为我解决这个问题。

情况如下:我有一个Visual Studio 2010项目。此项目位于Visual Studio 2010解决方案中。该项目包含以下文件:

add.h:

class Adder {
public:
    static int add(int i1, int i2);
};

add.cpp:

class Adder {
public:
    static int add(int i1, int i2) {
        return i1 + i2;
    }
};

main.cpp中:

#include "add.h"

int main() {
    Adder::add(5, 6);
    return 0;
}

当试图运行这个看起来相当基本的代码时,我收到以下链接器错误:

main.obj : error LNK2019: unresolved external symbol "public: static int __cdecl Adder::add(int,int)" (?add@Adder@@SAHHH@Z) referenced in function _main

从我收集的内容来看,这意味着链接器无法找到Adder :: add()的实现。但是,文件完全在同一个项目中,生成的.obj文件位于完全相同的文件夹中,我读过的关于类和头文件主题的每一个教程都告诉我这应该有用。

到目前为止,我尝试了以下潜在的解决方案:

  • 将项目自己的文件夹添加到其他includes / dependencies / sources / whatevers
  • 为各种事物添加外部标识符
  • 使用单独的命名空间
  • 希望他们能够工作的各种其他小调整

所以我想我的问题归结为:我怎样才能让链接器注意到add.cpp文件?感谢任何帮助,我现在花了几个小时没有成功,这对我来说似乎是一个非常基本的事情。

1 个答案:

答案 0 :(得分:2)

以下定义了一个全新的类

//add.cpp:
class Adder {
public:
    static int add(int i1, int i2) {
        return i1 + i2;
    }
};

与标题中的不同,仅适用于此翻译单元(“add.cpp”)。

它应包含的内容是:

//add.cpp
#include "add.h"
int Adder::add(int i1, int i2) {
    return i1 + i2;
}

这实现了标题add.h中的类中定义的方法。