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: 找到一个或多个多重定义的符号

但是,我正在处理以下错误消息,需要为我的结构找到最佳位置。关于我可以在这里做什么的任何想法?提前致谢。

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 回答