1

私は2つのファイルを持っています:

hello.hおよびhello.cpp

hello.h

#ifndef __HELLO_H__
#define __HELLO_H__

using namespace std;

void PrintMessage();

#endif

hello.cpp

#include <iostream>
#include "hello.h"

using namespace std;

void PrintMessage()
{
     cout << "I want to be displayed!";
}

PrintMessage()ここで、新しい.cppファイルで使用したいのですが、エラーメッセージが表示され続けます。これは私がしていることです:

Printingmessage.cpp

#include <iostream>
#include "hello.h"

using namespace std;

int main()
{
     PrintMessage();
     return 0;
}

私は露骨に間違ったことをしているだけですか?私はそれらすべてを同じフォルダに持っています。Dev-C ++(書き込み/コンパイル/実行に使用しているもの)と関係があると思いますが、理解できません。誰かアイデアはありますか?


デスクトップにフォルダを作成し、3つのファイルすべてをその中に入れて、printingmessage.cppファイルをそのままコンパイルしようとしました。これは私が得ているエラーです:

[Linker error] Undefined reference to 'PrintMessage()' 
4

2 に答える 2

0

私はdevC++を知りませんが、ターミナルに学習/移動してmakeファイルを使用するために本格的なコーディングを行うか、ビジュアルスタジオなどの新しいIDEを使用するかどうかを強くお勧めします。

実行できる短いスクリプトをbash.shとして保存します。

g++ hello.cpp -O2 -g -c 
g++ hello.o printmessage.cpp -Wall -O2 -o print

次に./printで実行します

于 2012-09-08T22:29:59.360 に答える
0

Dev-C ++(書き込み/コンパイル/実行に使用しているもの)と関係があると思いますが、理解できません。

私もそうだと思います。舞台裏では、次のことが発生する必要があります。

  1. 両方のファイルがコンパイルされます。これにより、*.objファイルごとに*.cppファイルが作成され、ヘッダーが使用されます。
  2. オブジェクトファイルは相互にリンクされており、必要なライブラリに対してリンクされている可能性があります。

問題は、2番目のステップの「互いに」の部分にあります。コードは正常にコンパイルされますが、リンクは失敗します。その時点では、ヘッダーファイルは関係ありません。より正確には、のリンカ呼び出しにprintingmessage.objは、そのオブジェクトファイルまたはデフォルトライブラリのいずれにも定義されていない関数への参照が含まれています。ほとんどの場合、問題は*.cppファイルが同じプロジェクトの一部ではないことが原因です。複数のオブジェクトファイルをリンクできるマルチソースファイルプロジェクトを作成する必要があります。Dev-C ++でそれを行う方法は、おそらく彼らのマニュアルのどこかにあります。

于 2012-09-09T00:54:03.857 に答える