gpt4 book ai didi

c++ - 如何在 header 中使用尚未定义的数据类型?

转载 作者:太空宇宙 更新时间:2023-11-04 14:11:06 24 4
gpt4 key购买 nike

我在 linux 上使用 g++ 进行编程,我经常遇到这样的问题,即我需要在我稍后定义的头文件中使用类或数据类型,无论是在稍后的头文件中还是在另一个头文件中。

例如看这个头文件:

class example
{
mydatatype blabla;
};

struct mydatatype
{
int blablainteger;
char blablachar;
};

这会出错,因为 mydatatype 在其定义之前被使用所以通常我会这样改变它:

struct mydatatype; // <-- class prototype
class example
{
mydatatype *blabla; // <-- now a pointer to the data type
// I will allocate the data during runtime with the new operator
};

struct mydatatype
{
int blablainteger;
char blablachar;
};

现在可以了。我通常可以将定义放在上面,或者包含所需的 header ,但我不想在 header 中包含 header 或玩弄定义顺序,它总是变得困惑。

我展示的解决方案通常是有效的,但现在我遇到了一个新现象。这次数据类型不是类而是 typedef,我不能使用 typedef 的原型(prototype)而且我不想使用 typedef 包含的实际数据类型。它也很乱。
有什么解决办法吗?

最佳答案

首先,您想到的解决方案(原型(prototype)和指针)是不需要的,而且比没有指针的情况下实现它要慢。

“正确”的解决方案是为每种类型创建单独的 header ,然后将它们包含在您的其他 header 中。这样它将始终被定义!您甚至可以让它们相互包含。

但是,如果您曾经打开过 g++ 提供的 .h 文件,您很可能会在标题的开头看到这个:

#ifndef SOMETHING_H
#define SOMETHING_H

// Code

#endif /* SOMETHING_H */

这是为了解决类型重新定义自己的问题。

如果它们不存在,并且您多次包含头文件,类型将被重新定义,并且会抛出错误。这使得类型始终存在,但绝不会包含两次。

希望对您有所帮助!

关于c++ - 如何在 header 中使用尚未定义的数据类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14295349/

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