1

私はこれを取得しようとしています:

//C.h
#ifndef C_H
#define C_H
#include "c.h"

class C
{
    public:
        C();
        int function(int, int);
};
#endif

これは次のように定義されています。

//c.cpp
#include "c.h"
C::C()
{
}
int C::function(int a, int b)
{
    return a * b;
}

これで作業するには:

//crp.cpp
#include <iostream>
#include "c.h"

void main(void)
{
    C a;
    std::cout << a.function(1, 2);
}

しかし、2つのエラーが発生します

エラー: C:\C++\CRP.OBJ から参照されている未解決の外部 'C::C()'

エラー: C:\C++\CRP.OBJ から参照された未解決の外部 'C::function(int, int)'

私は本当に立ち往生しています。助けてください。

編集:

返信ありがとうございます。

コマンド ライン経由で Wi​​n32 用の Borland C++ 5.5.1 を使用しています。実際にはリンカーが何であるかわかりません。これを試したのはこれが初めてです。

4

5 に答える 5

3

リンクフェーズは、 crp.objとc.objではなく、crp.objだけから実行可能ファイルを作成しようとしているようです。

どのようにそれをコンパイルしていますか?これは次のようになります(Borlandの場合、編集で述べたように):

bcc32 -ecrp.exe crp.cpp c.cpp

また、ch内にインクルードラインは必要ありません。無限のインクルードループを停止するのは、インクルードガードだけです。

于 2008-11-21T00:14:38.387 に答える
1

プログラムをリンクするときは、c.objファイルとcrp.objファイルの両方をリンクする必要があります。表示されているエラーは、crp.objファイルのみがリンクに使用されているためです。

どのコンパイラを使用していますか?VisualStudioのようなものを使用している場合、c.cppとcrp.cppの両方が同じプロジェクトにある場合は、機能するはずです。コマンドラインを使用してビルドする場合は、両方のファイルをリンクする必要があります。

gcc -o crp.exe c.cpp crp.cpp

gccの場合

于 2008-11-21T00:14:26.607 に答える
0

うーん...どのコンパイラ/リンカーを使用していますか?リンカに提供された引数?ファイルは同じプロジェクトの一部ですか?

于 2008-11-21T00:13:49.840 に答える
0

返信ありがとうございます、

私はWin32にBorlandC++ 5.5.1を使用していますが、コマンドラインからリンカーが何であるかは実際にはわかりません。これを試したのはこれが初めてです。

編集:

**これは私が以前にWindowsのコマンドプロンプトで試していたものです:

C:\c++>bcc32 crp

**そしてこれは結果でした:

Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland

crp.cpp:

Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland

Error: Unresolved external 'C::C()' referenced from C:\C++\CRP.OBJ

Error: Unresolved external 'C::function(int, int)' referenced from C:\C++\CRP.OBJ

**それから私はこれを試しました:

bcc32 -ecrp.exe crp.cpp c.cpp

** Pax Diabloが提案し、これを入手したように:

C:\c++>bcc32 -ecrp.exe crp.cpp c.cpp

Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland

crp.cpp:

c.cpp:

Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland

**しかし、crp.cppをもう一度コンパイルしようとすると、以前と同じエラーが発生しました。

C:\c++>bcc32 crp

Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland

crp.cpp:

Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland

Error: Unresolved external 'C::C()' referenced from C:\C++\CRP.OBJ

Error: Unresolved external 'C::function(int, int)' referenced from C:\C++\CRP.OBJ

編集:おっと!間違った方法で再度コンパイルしようとすると、かなりばかげていました。今でも動作します。したがって、解決策は、Pax Diabloが最初に提案したように、crp.cppを次のようにコンパイルすることです。

    bcc32 -ecrp.exe crp.cpp c.cpp

返信してくれた皆さん、ありがとうございました!

于 2008-11-21T00:17:21.783 に答える
0

どのコンパイラ/開発環境を使用していますか? これはコマンドラインからですか、それとも IDE からですか?

c.cpp をコンパイルし、リンカーに c.obj を crp.obj と共にインクルードして実行可能ファイルを作成するように指示する必要があります。

于 2008-11-21T00:12:57.390 に答える