c – 头部防护难题 – 已在.obj问题中定义
发布时间:2020-12-16 03:21:21 所属栏目:百科 来源:网络整理
导读:我有一个类(A),它必须包含两个文件,类X和类Y.不幸的是,类Y还需要在它的头文件中包含类X,因为构造函数将一个指向类X类型的指针作为参数. 潜在的问题是会出现链接器错误吗?因为A类现在有两个X类副本,一个需要使用,一个来自Y类.这就是头部保护没用的情况.我的
我有一个类(A),它必须包含两个文件,类X和类Y.不幸的是,类Y还需要在它的头文件中包含类X,因为构造函数将一个指向类X类型的指针作为参数.
潜在的问题是会出现链接器错误吗?因为A类现在有两个X类副本,一个需要使用,一个来自Y类.这就是头部保护没用的情况.我的问题是 – 这纯粹是一个结构性问题还是有办法解决这个问题? 我真的更愿意不在Y类的头文件中包含任何内容,以防我想在其他任何内容中包含THAT,但是由于函数原型,它是否必要? 解决方法
如果您有以下内容:
X.h #ifndef X_H__ #define X_H__ class X { public: int foo() { return 1; } }; #endif Y.h #ifndef Y_H__ #define Y_H__ #include "X.h" class Y { public: Y(X *pX) { myval = pX->foo(); } int myval; }; #endif something.cpp #include "X.h" ... something_else.cpp #include "Y.h" ... 那应该没问题. 但是,如果X.h看起来像这样: #ifndef X_H__ #define X_H__ class X { public: int foo(); }; int X::foo() { return 1; } #endif 那么当你尝试链接something.cpp和something_else.cpp时,你确实会遇到链接器错误. X :: foo将被定义为非内联到两个单独的翻译单元. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |