2016-12-01 17 views
0

私は、C++、にextern、およびGCC

ファイル1次のシナリオを持っている:main.cの

extern void afunction(int); 

int main() 
{ 
    afunction(0); 
} 

ファイル2:other.cpp

void afunction() 
{ 
    // do some crazy stuff. 
    return; 
} 

どのように私はそれらをリンクしますコンパイラが関数()を見つけようとしたときに2つのファイルが一緒になってしまうのですか?

注1:私は

注2「other.cpp」の#includeを使用することはできません:私は、私は他に選択肢がない場合を除き、ライブラリを作成する必要はありません。

-

私は、次のgccコマンドを試みたが、それは未定義の参照を提供します。

gcc other.cpp main.c 

ありがとう! other.h

新しいファイルをMAIN.CPPする

+0

CとC++を混在させる場合、 'main'は* .cppファイルになければなりません。 – aschepler

+0

'other.cpp'では、あなたの関数定義を' extern "C" {} 'ブロックに入れる必要があります(または単に追加の宣言子として' extern "C" 'を追加する必要があります)。 。 – Galik

+4

これらの「機能」は同じではありません。 1つは1つのパラメータをとり、もう1つは0のパラメータをとります。名前のマングリングは2つの関数をあいまいにするので、リンカは決して '関数(int)'を見つけることはありません。 – PaulMcKenzie

答えて

1

名前の変更main.cに、

#ifndef other_H 
#define other_H 


void afunction(); 

#endif 

はそれがあることを

#include "other.h" 

int main() 
{ 
    afunction(); 
} 

注意ごmain.cppに中の#includeを追加しますafunction()の宣言と定義が一致していることが重要です。したがって、余分なヘッダーファイルです。 2つのファイルに収まるほど複雑なものを扱うときは、常に関数宣言でヘッダファイルを追加するか、別の言語に切り替えます。これは、c/C++が25年以上働くことを意図している方法です。

+0

私はヘッダファイルを使いたくありません。 – SFD

+0

@SDF、あなたが尋ねた質問では、.cppファイルを含める必要はありません。これは標準であり、.cppファイルは絶対に含まれません!しかし、常に.hファイルも含めてください。 – Bamaco

関連する問題