lek*_*oif 2 c++ linker declaration undefined-reference
我有三个文件:myh.h; my.cpp; use.cpp.以下是文件的内容:
myh.h
extern int foo;
void print_foo();
void print(int);
Run Code Online (Sandbox Code Playgroud)
my.cpp
#include "myh.h"
#include <iostream>
void print_foo()
{
std::cout<<foo<<std::endl;
}
void print(int i)
{
std::cout<<i<<std::endl;
}
Run Code Online (Sandbox Code Playgroud)
use.cpp
#include "myh.h"
int main()
{
foo=7;
print_foo();
print(99);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
GCC发出以下错误:
my.o:my.cpp:(.text+0x7): undefined reference to `foo'
use.o:use.cpp:(.text+0x10): undefined reference to `foo'
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
我使用-c命令编译文件,它不会给出错误.我使用以下命令进行链接:
g++ -o final my.o use.o
Run Code Online (Sandbox Code Playgroud)
这里有什么问题,我读了类似问题的其他主题,这里的情况很奇怪.....
好奇的是,这是Stroustrup的"使用C++编程原则"一书中的练习练习
编辑:我做了像dasblinkenlight说的那样,并且在use.cpp中我在foo前添加了一个int(所以现在定义了foo),但我仍然得到这个错误:
my.o:my.cpp:(.text+0x7): undefined reference to `foo'
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
哪个告诉我它在my.cpp中也没有定义呢?如果我必须在任何地方定义它在头文件中包含它的重点是什么,或者如何更恰当地接近它?
您收到链接器错误,因为您已声明 foo,但您从未定义它.
extern int foo只是一个宣言; 它不会导致foo变量的内存分配,只承诺你会在其他地方进行.要修复它,您需要将此行添加到其中一个cpp文件中,如下所示:
#include "myh.h"
int foo;
int main()
{
foo=7;
print_foo();
print(99);
return 0;
}
Run Code Online (Sandbox Code Playgroud)