gpt4 book ai didi

c++ - header guard 难题 - 已经在 .obj 问题中定义

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:17:16 31 4
gpt4 key购买 nike

我有一个类 (A),它必须包含两个文件,X 类和 Y 类。不幸的是,Y 类还需要在其头文件中包含 X 类,因为构造函数将指向 X 类类型的指针作为参数.

潜在的问题是会出现链接器错误?因为 A 类现在有两个 X 类的拷贝,一个它需要使用,一个来自 Y 类。在这种情况下,header guards 是没有用的。我的问题是 - 这纯粹是结构性问题还是有解决办法?

我真的宁愿不在类 Y 的头文件中包含任何内容,以防我想在其他任何内容中包含它,但由于函数原型(prototype),是否有必要这样做?

最佳答案

如果您有以下情况:

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.cppsomething_else.cpp 时,您确实会遇到链接器错误。 X::foo 将被非内联定义为两个单独的翻译单元

关于c++ - header guard 难题 - 已经在 .obj 问题中定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7528162/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com