ファイル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する
CとC++を混在させる場合、 'main'は* .cppファイルになければなりません。 – aschepler
'other.cpp'では、あなたの関数定義を' extern "C" {} 'ブロックに入れる必要があります(または単に追加の宣言子として' extern "C" 'を追加する必要があります)。 。 – Galik
これらの「機能」は同じではありません。 1つは1つのパラメータをとり、もう1つは0のパラメータをとります。名前のマングリングは2つの関数をあいまいにするので、リンカは決して '関数(int)'を見つけることはありません。 – PaulMcKenzie