1

我坚信这是一个非常基本的事情,每个活着的人都完全能够执行,但不知何故它不适合我。通过 Google 找到的常见问题解答和许多其他主题/问题并没有为我解决这个问题。

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

添加.h:

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

添加.cpp:

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

主.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 文件位于完全相同的文件夹中,并且我读过的关于类和头文件主题的每一个教程都告诉我这应该可以工作。

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

  • 将项目自己的文件夹添加到附加的 include/dependencies/sources/whatevers
  • 向各种事物添加外部标识符
  • 使用单独的命名空间
  • 其他各种小调整,希望它们能奏效

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

4

1 回答 1

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;
}

这实现了从 header 类中定义的方法add.h

于 2012-12-05T00:19:06.497 回答