gpt4 book ai didi

c++ - Unresolved 符号错误

转载 作者:太空宇宙 更新时间:2023-11-04 15:18:44 28 4
gpt4 key购买 nike

我正在使用 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);
}

最佳答案

extern int foo;

这是一个声明。它告诉编译器“在某处定义的全局命名空间中将有一个名为 foo 的变量,类型为 int”。

int main(){    
int foo = 7;
// ...
}

这在函数 main() 中定义了一个类型为 int 的局部变量 foo 并将其初始化为 7。这个局部变量不是在 main() 之外可见。

您实际上没有做的是在全局命名空间中定义 foo。为此,将此行添加到 exactly one my.cppuse.cpp 中,在包含之后:

int foo;

这在全局命名空间中定义了一个名为 fooint 类型的变量。 (作为静态存储持续时间的对象,foo 默认初始化为零,但如果需要,您也可以提供不同的初始化程序。)然后链接器应该能够解析对全局的引用foo 当您将目标文件链接在一起时,它位于 print_foo() 中。

您只定义 foo 一次非常重要,尽管您可以根据需要声明多次。否则会违反单一定义规则,幸运的话会导致链接器错误,否则会导致未定义的行为。

关于c++ - Unresolved 符号错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24542110/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com