2

だから私はC++を学ぼうとしていて、ヘッダーファイルを使用するところまで来ました。彼らは本当に私には意味がありません。これの多くの組み合わせを試しましたが、これまでのところ何も機能していません:

Main.cpp:

#include "test.h"

int main() {
    testClass Player1;
    return 0;
}

test.h:

#ifndef TEST_H_INCLUDED
#define TEST_H_INCLUDED
class testClass {
    private:
        int health;
    public:
        testClass();
        ~testClass();
        int getHealth();
        void setHealth(int inH);
};
#endif // TEST_H_INCLUDED

test.cpp:

#include "test.h"

testClass::testClass() { health = 100; }
testClass::~testClass() {}

int testClass::getHealth() { return(health); }
void testClass::setHealth(int inH) { health = inH; }

私がやろうとしていることは非常に単純ですが、ヘッダー ファイルが機能する方法はまったく意味がありません。コード ブロックは、ビルド時に次を返します。

obj\Debug\main.o(.text+0x131)||関数main':| *voip*\test\main.cpp |6|undefined reference to内 testClass::testClass()'| obj\Debug\main.o(.text+0x13c): voip \test\main.cpp|7|`testClass::~testClass()' への未定義の参照| ||=== ビルドが終了しました: 2 つのエラー、0 の警告 ===|

助けていただければ幸いです。または、まともなチュートリアルがある場合は、それも問題ありません(私がグーグルで検索したチュートリアルのほとんどは役に立ちませんでした)

4

5 に答える 5

4

test.cppCode::Blocks は、オブジェクト ファイルをコンパイルして生成する必要があることを知りませんtest.o(オブジェクト ファイルを一緒にリンクしmain.oて実行可能ファイルを生成できるようにするため)。プロジェクトに追加する必要がありtest.cppます。

Code::BlocksProject>Add Fileで、メニューに移動し、test.cppファイルを選択します。リリースとデバッグの両方のチェックボックスがオンになっていることを確認してください。

それからBuild->Rebuild

編集:

コンパイル時に IDE が内部で何を行っているかを確認するのに役立つヒントを次に示します。ドロップボックスに移動しSettings -> Compiler and Debugger -> Global Compiler Settings -> Other settingsて選択Full command lineします。Compiler loggingこれで、ビルドするたびに、gcc コンパイラ コマンドがビルド ログに記録されます。StackOverflow の誰かがあなたが使用した gcc コマンド ラインを尋ねられたときはいつでも、ビルド ログにあるものをコピーして貼り付けることができます。

于 2010-06-08T20:18:09.853 に答える
3

ヘッダーの設定方法に問題はありません。リンク中にエラーが発生しています。あなたのgccコマンドラインは何ですか? 私の推測では、あなたは main.cpp だけをコンパイルしていて、test.cpp を忘れていると思います。

于 2010-06-08T19:53:45.160 に答える
0

他の回答で述べたように、これはリンクエラーです。このようにコンパイルしてリンクします。

g++ Main.cpp test.cpp -o myprogram -Wall -Werror
于 2010-06-08T19:58:26.360 に答える
0

ビルドに使用しているコマンドは何ですか? でコンパイルおよびリンクしていないようです。そのtest.cppためmain.cpp、適切なシンボルを検索しようとすると、それらが見つかりません (リンクの失敗)。

于 2010-06-08T19:53:48.203 に答える
0

ヘッダー ファイルに関するいくつかの (簡単な) 情報 -- .cpp ファイルの #include 行は、そのファイルの内容をその時点でコンパイルされるストリームに貼り付けるようにコンパイラに指示するだけです。そのため、testClass を 1 か所 (test.h) で宣言し、それを多くの場所で使用できます。(main.cpp、someother.cpp、blah.cpp)。test.cpp には testClass のメソッドの定義が含まれているため、最終的な実行可能ファイルにもリンクする必要があります。

しかし、ヘッダー ファイルに魔法はありません。同じクラスや関数を何度も宣言する必要がないように、便宜上使用される単純なテキスト置換にすぎません。#ifndef TEST_H_INCLUDED をそこに (正しく) 入れたので、test.h を #include し、main.cpp に #test.h と someother.h の両方を #include する someother.h がある可能性があります。 testClass 宣言の単一のコピー。

お役に立てれば!

于 2010-06-08T20:05:06.007 に答える