1

カメラの状態を管理するための次の構造体があります

 struct keyState
 {
    float x_rotation, y_rotation, z_rotation;
    float x_rotation_rad, y_rotation_rad, z_rotation_rad;
    float x_pos, y_pos, z_pos;
 } state_manager;

この構造体は、私のWalkingCameraManipulator.hクラスにあります。WalkingCameraManipulatorはWalkingCameraManipulator.cppに実装されており、メインクラスに#include"WalkingCameraManipulator"があります。

エラー1エラーLNK2005: "struct keyState state_manager"(?state_manager @@ 3UkeyState @@ A)はすでにmain.objで定義されていますエラー2エラーLNK1169:1つ以上の複数定義されたシンボルが見つかりました

ただし、次のエラーメッセージを処理しているため、構造に最適な場所を見つける必要があります。ここで何ができるかについて何かアイデアはありますか?前もって感謝します。

4

1 に答える 1

5

末尾state_managerはインスタンスを定義します。ヘッダー内。どちらが間違っています。コードを次のようにリファクタリングすることをお勧めします。

struct keyState
 {
    float x_rotation, y_rotation, z_rotation;
    float x_rotation_rad, y_rotation_rad, z_rotation_rad;
    float x_pos, y_pos, z_pos;
 } ;

extern keyState state_manager;

//somecppfile.cpp
keyState state_manager;

パーツはextern宣言であり、定義は単一の実装ファイルに含まれています。これは意図した動作を模倣しています、おそらくあなたが本当に望んでいるものではありません。のグローバルインスタンスが本当にkeyState必要ですか?そうでない場合は、すべて削除します。

struct keyState
 {
    float x_rotation, y_rotation, z_rotation;
    float x_rotation_rad, y_rotation_rad, z_rotation_rad;
    float x_pos, y_pos, z_pos;
 } ;
于 2012-10-30T20:32:59.680 に答える