我有一个类 (A),它必须包含两个文件:类 X 和类 Y。不幸的是,类 Y 还需要在其头文件中包含类 X,因为构造函数将指向类 X 类型的指针作为参数。
潜在的问题是会出现链接器错误吗?因为类 A 现在有两份类 X 的副本,一份是它需要使用的,一份来自类 Y 的。在这种情况下,标头保护是没有用的。我的问题是——这纯粹是一个结构性问题还是有办法解决这个问题?
我真的不想在类 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
一些东西.cpp
#include "X.h"
...
别的东西.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
and something_else.cpp
. X::foo
将被非内联定义为两个单独的翻译单位.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)