【问题标题】:C++ one or more multiply defined symbols foundC++ 找到一个或多个多重定义的符号
【发布时间】:2012-10-30 20:31:31
【问题描述】:

我有以下结构来管理相机状态

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

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

【问题讨论】:

    标签: c++


    【解决方案1】:

    结尾的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;
     } ;
    

    【讨论】:

    • 非常感谢您清楚地解释这一点。我原以为这是 C 声明结构类型的方式。
    • @Kobojunkie 不,C 方式将通过typedef - typedef struct X {} X; 提供名称
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多