我有一个类(A),它必须包含两个文件,类X和类Y.不幸的是,类Y还需要在它的头文件中包含类X,因为构造函数将一个指向类X类型的指针作为参数.
潜在的问题是会出现链接器错误吗?因为A类现在有两个X类副本,一个需要使用,一个来自Y类.这就是头部保护没用的情况.我的问题是 - 这纯粹是一个结构性问题还是有办法解决这个问题?
我真的更愿意不在Y类的头文件中包含任何内容,以防我想在其他任何内容中包含THAT,但是由于函数原型,它是否必要?
Oli*_*rth 11
如果您有以下内容:
XH
#ifndef X_H__
#define X_H__
class X
{
public:
int foo() { return 1; }
};
#endif
Run Code Online (Sandbox Code Playgroud)
YH
#ifndef Y_H__
#define Y_H__
#include "X.h"
class Y
{
public:
Y(X *pX) { myval = pX->foo(); }
int myval;
};
#endif
Run Code Online (Sandbox Code Playgroud)
something.cpp
#include "X.h"
...
Run Code Online (Sandbox Code Playgroud)
something_else.cpp
#include "Y.h"
...
Run Code Online (Sandbox Code Playgroud)
那应该没问题.
但是,如果X.h是这样的话:
#ifndef X_H__
#define X_H__
class X
{
public:
int foo();
};
int X::foo() { return 1; }
#endif
Run Code Online (Sandbox Code Playgroud)
那么当您尝试链接,你会得到确实链接错误something.cpp和something_else.cpp. X::foo将被非内联定义为两个单独的翻译单元.
| 归档时间: |
|
| 查看次数: |
4825 次 |
| 最近记录: |