我完全相信这是一个非常基本的事情,每个活着的人都能完美地表现,但不知怎的,它对我不起作用。常见问题以及通过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文件位于完全相同的文件夹中,我读过的关于类和头文件主题的每一个教程都告诉我这应该有用。
到目前为止,我尝试了以下潜在的解决方案:
所以我想我的问题归结为:我怎样才能让链接器注意到add.cpp文件?感谢任何帮助,我现在花了几个小时没有成功,这对我来说似乎是一个非常基本的事情。
答案 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
中的类中定义的方法。