私は3つのファイルを持っています:myh.h; my.cpp; use.cpp。ファイルの内容は次のとおりです。
myh.h
extern int foo;
void print_foo();
void print(int);
my.cpp
#include "myh.h"
#include <iostream>
void print_foo()
{
std::cout<<foo<<std::endl;
}
void print(int i)
{
std::cout<<i<<std::endl;
}
use.cpp
#include "myh.h"
int main()
{
foo=7;
print_foo();
print(99);
return 0;
}
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
-cコマンドを使用してファイルをコンパイルしましたが、エラーは発生しません。次のコマンドを使用してリンクします。
g++ -o final my.o use.o
ここでの問題は何ですか、私は同様の問題を持つ他のトピックを読みました、そしてここでのケースはただ奇妙です....。
好奇心旺盛な方のために、これはStroustrupの本「C++を使用するプログラミングの原則」からの演習ドリルです。
編集: dasblinkenlightが言ったように、use.cppでfooの前にintを追加しました(これでfooが定義されました)が、それでもこのエラーが発生します:
my.o:my.cpp:(.text+0x7): undefined reference to `foo'
collect2: ld returned 1 exit status
my.cppでも定義されていないことを教えてくれますか?どこでも定義する必要がある場合、ヘッダーファイルにインクルードすることのポイントは何ですか、またはこれにどのように適切にアプローチする必要がありますか?