gpt4 book ai didi

c++ - 使用 G++ 编译时出现 "Undefined Refrence to Foo"

转载 作者:行者123 更新时间:2023-11-30 04:41:32 24 4
gpt4 key购买 nike

我有三个文件:

我的.cpp

#include "my.h"
#include <iostream>

void print_foo() {
cout << foo << '\n';
}

void print(int i) {
cout << i << '\n';
}

my.h

extern int foo; 
void print_foo();
void print(int);

使用.cpp

#include "my.h"

int main(int argc, char *argv[]) {
foo = 7;
print_foo();
print(99);
return 0;
}

现在当我运行 g++ my.cpp use.cpp 时出现错误

/usr/bin/ld: /tmp/ccUKJUlZ.o: in function `print_foo()':
my.cpp:(.text+0x6): undefined reference to `foo'
/usr/bin/ld: /tmp/ccN0mIhY.o: in function `main':
use.cpp:(.text+0x11): undefined reference to `foo'
collect2: error: ld returned 1 exit status

此外,如果我运行 g++ -c my.cpp 一切正常,但是,如果我随后运行 g++ my.o use.cpp 我会得到同样的错误.

最佳答案

您实际上从未定义变量foo - 在use.cppmy.cpp 中,您使用 foo,并在my.h声明它为extern

参见this response的开头有关声明与定义的更多信息。您可能认为,如果在 use.cpp 中的 foo = 7 行前面添加一个类型,您的问题就会得到解决;但是,您还需要做的是使 foo 成为一个全局变量 而不是局部变量(当您在 main 中声明它时>),因为 extern 只会“查找”具有全局范围的变量。您可以通过在任何函数之外声明它来使变量成为全局变量(旁注 - 您应该只在绝对必须时使用全局变量)。

因此,您可以通过将 use.cpp 更改为以下内容来解决您的问题:

#include "my.h"

int foo = 7;
int main(int argc, char *argv[]) {
print_foo();
print(99);
return 0;
}

关于c++ - 使用 G++ 编译时出现 "Undefined Refrence to Foo",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59112592/

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