我将一个简单的项目分解为以下源文件:
my.h:
#ifndef MY_H
#define MY_H
extern int val;
void print_val();
#endif
my.cpp:
#include "my.h"
#include <iostream>
void print_val()
{
std::cout << val;
}
main.cpp中:
#include "my.h"
int main()
{
val = 4;
print_val();
return 0;
}
编译时,我收到以下错误:
1>main.obj : error LNK2001: unresolved external symbol "int val" (?val@@3HA)
1>my.obj : error LNK2001: unresolved external symbol "int val" (?val@@3HA)
1>c:\...\test.exe : fatal error LNK1120: 1 unresolved externals
为什么会这样?我只想在头文件中声明一个变量和函数,并在一个单独的源文件中定义该函数。我使用的是Visual C ++ 2010 Express,该项目是一个Win32控制台应用程序。
答案 0 :(得分:4)
在你的my.cpp
中你可能想要定义你的外部变量,如下所示:
int val; // optionally you can also initialize it here, like this: int val=0;
这将确保编译器实际为此变量分配一个对象,该对象稍后可以链接到您的可执行文件中。
在相关说明中 - 确保源文件的所有中只有一个此类extern
变量的定义,否则您将拥有重复的符号和链接器不会满意
答案 1 :(得分:2)
您正在定义该函数,但您永远不会声明变量val
。这就是为什么它的符号无法找到的原因。