0

C++ を使用して別のファイルにクラスを配置しようとしていますが、.cpp ファイルを含めないと機能しません。

クラス例のCPPファイルです

//Example.cpp
#include "Example.h"
#include<iostream>
using namespace std;

Example::Example()
{
    cout<<"I am am Executed\n";
} 

これはヘッダファイルです

//Example.h
#ifndef EXAMPLE_H
#define EXAMPLE_H


class Example
{
    public:
        Example();
};
#endif

C++ファイルをメイン関数ファイルに含めないと、エラーが発生します

#include "Example.h"
//#include "Example.cpp"
#include<iostream>
using namespace std;
int main()
{
    Example aak;
    return 0;
}

//#include "Example.cpp"をコメントアウトしたので、次のエラーが表示されます。

/tmp/ccuHMRJB.o: In function `main':
main.cpp:(.text+0x10): undefined reference to `Example::Example()'
collect2: ld returned 1 exit status

ただし、#include "Example.cpp" のコメントを外すと、問題なく動作します。私に出力を与える

私は処刑された!

プログラムを実行するために両方のファイル (.h と .cpp) を含める必要がある理由がわかりません。.h ファイルを含めるだけで機能するはずですが、そうではありません....

4

2 に答える 2

1

ファイルを他のファイルに含めないでください。代わりに、コンパイラ コマンド ラインでプロジェクトを構成するすべてのファイルを一覧表示します。.cpp.cpp.cpp

于 2013-03-08T18:22:45.020 に答える
0

これは、cpp ファイルをインクルードすると、ファイル (つまり関数) もコンパイルされるためです。ただし、プロトタイプ ファイル、つまりヘッダー ファイルをインクルードする場合は、関数コードの実行可能コードを検索する場所も指定する必要があります。cppファイルをバイナリ形式(すでにコンパイル済み)で保存したライブラリをリンカーが見つける場所を意味します。それ以外の場合は、コンパイルする必要がありました。後者はあなたの状況だと思います(つまり、cppファイルからライブラリを作成していません)。ここで、cpp ファイルをインクルードしないとコンパイルされないと考えてください。次に、バイナリ コードが存在しない関数を呼び出しています。


したがって、cpp ファイルをインクルードしないと、リンカーはエラーをスローします。

于 2013-03-08T18:25:01.743 に答える