【发布时间】:2014-08-23 21:26:09
【问题描述】:
我正在使用 Visual Studio 2012 完成编程原理和实践中的练习。尝试编译下面的源代码时出现链接器错误:
unresolved symbol int foo.
我不明白为什么该符号未解析。
我的.h
extern int foo;
void print_foo();
void print(int);
我的.cpp
#include "my.h"
#include "../../std_lib_facilities.h"
void print_foo()
{
cout<<foo<<'\n';
}
void print(int i)
{
cout<<i<<'\n';
}
使用.cpp
#include "my.h"
int main(){
int foo = 7;
print_foo();
print(99);
}
【问题讨论】:
-
请正确格式化您的代码!
-
您从未在全局命名空间中定义
foo。extern int foo;只是一个声明,而不是一个定义。foo的唯一定义是main()中的局部变量。 -
foo 的全局定义是哪个文件有关系吗?
-
是的,不。您可以在任一源文件(而不是标题)中定义它,并且代码将链接。是的;您应该在
my.cpp中定义它,因为它是my.h和my.cpp文件提供的接口的一部分。如果您有 6 个程序使用my包,您不希望每个程序都必须定义全局foo。 -
T.C.非常感谢提供的信息非常有帮助。
标签: c++ header-files extern unresolved-external compilationunit