C++结构体类型重定义错误的原因分析及修复方法咨询
解决C++结构体类型重定义问题
核心解决方案
直接删除globals.h中自行定义的空BaseApp和App结构体——你已经通过#include <sdk/app/App.h>引入了这两个结构体的完整定义,重复定义必然触发编译器的重定义错误。
后续防护措施
给
globals.h添加头文件保护,避免该文件被多次包含时,间接重复引入App.h导致的潜在问题:#ifndef GLOBALS_H #define GLOBALS_H // 保留原有的#include <sdk/app/App.h> #include <sdk/app/App.h> // 其他全局变量、声明等代码 #endif // GLOBALS_H也可以使用C++11及以上支持的
#pragma once替代上述宏定义,写法更简洁:#pragma once #include <sdk/app/App.h> // 其他代码确认
App.h自身的头文件保护:检查<sdk/app/App.h>内部是否已经添加了头文件保护或#pragma once。如果没有,即使globals.h做了保护,其他文件多次直接包含App.h仍会触发重定义错误。
额外注意
如果后续需要在globals.h中仅声明(而非定义)这些结构体(比如用于声明指针/引用),可以使用前向声明替代直接包含头文件,但前提是你不需要在globals.h中使用结构体的具体成员:
struct BaseApp; struct App; // 例如声明全局指针 extern BaseApp* g_base_app; extern App* g_app;
但这种场景仅适用于不需要访问结构体内部成员的情况,若要使用完整定义,还是通过#include <sdk/app/App.h>引入更可靠,同时避免自行定义同名结构体。
内容的提问来源于stack exchange,提问作者Marsuranus
相关产品推荐
相关产品推荐

