3

投稿の下部に示すように、「player.h」ファイルで宣言され、「player.cpp」ファイルで初期化された5つのfloatパラメーターを受け取るコンストラクターを持つPlayerというクラスがあります。

プログラムを実行しようとすると、次のエラーが発生します。

build/Debug/MinGW-Windows/player.o: In function `Player':
C:\Users\User\Dropbox\NetBeans Workspace\Testing/player.cpp:11: multiple definition of `Player::Player(float, float, float, float, float)'
build/Debug/MinGW-Windows/main.o:C:\Users\User\Dropbox\NetBeans Workspace\Testing/player.h:20: first defined here

私はここで何が間違っているのですか?コンストラクターの前に「public:」を削除しようとしましたが、まったく役に立ちませんでした。コンストラクターの定義が複数あると表示されますが、初期化するのは1回だけです。当たり前のことだと思います。

2つのファイルの完全なソース:

「player.cpp」

#include "player.h"

Player::Player(float x, float y, float z, float rx, float ry) {

}

「player.h」

#ifndef PLAYER_H
#define PLAYER_H

class Player {

public:

    Player(float x, float y, float z, float rx, float ry);
};

#endif
4

1 に答える 1

5

おそらく.hファイルを保護していません。

にを含めるplayer.hmain.cpp、このコンパイル単位の定義が1つ取得されます。そして、それはに含まれplayer.cpp、そこで2番目の定義を取得します。

コンパイラがをサポートしていない場合は、従来の#pragma once方法で手動で保護する必要があります。

#ifndef PLAYER_H
#define PLAYER_H

// all your class definition code here

#endif
于 2013-02-09T23:43:36.507 に答える