我有一个类(A),它必须包含两个文件,类X和类Y.不幸的是,类Y还需要在它的头文件中包含类X,因为构造函数将一个指向类X类型的指针作为参数.
潜在的问题是会出现链接器错误吗?因为A类现在有两个X类副本,一个需要使用,一个来自Y类.这就是头部保护没用的情况.我的问题是 – 这纯粹是一个结构性问题还是有办法解决这个问题?
解决方法
如果您有以下内容:
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将被定义为非内联到两个单独的翻译单元.
原文地址:https://www.jb51.cc/c/111760.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。