gpt4 book ai didi

c++ - 如何解决在 C++ header 中声明 typedef 的问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:19:32 25 4
gpt4 key购买 nike

我想知道是否有人可以在不重组的情况下提供解决这种情况的方法的建议:我有一个包含类声明的 header ,并声明了一些它通过引用/指针使用的类,这显然是比较好的做法简单地包含这些类的标题。

struct Foo;

struct Bar;

struct MyStruct
{
void doIt( const Foo* foo );

void doIt( const Bar* bar );
};

但是,虽然在上面的示例中 Foo 是一个类,但根据下面的粗略示例,Bar 实际上是一个类的 typedef:

#include <fd_ex.h>

struct Foo
{
int a;
};

struct Bar_
{
int a;
};

typedef Bar_ Bar;

这会导致一些问题,如预声明 struct Bar显然不正确 - Bar不是结构:

"fd_ex.cpp", line 13: Error: Multiple declaration for Bar.
"fd_ex.cpp", line 19: Error: The name Bar is ambiguous, Bar and Bar.
2 Error(s) detected.

我不想暴露Bar_如果可能的话,主要是因为在现实生活中这可能比这个例子复杂得多。

但是,如果我对 Bar 的结构声明和类型定义无法控制 ,我可以在 MyStruct 的 header 中使用任何技术吗?保持预先声明的精神Bar

最佳答案

我不确定它在 C++ 中是否完全相同,但在 C 中,我经常声明“不透明”结构,它在头文件(比方说 mystruct.h)中有:

typedef struct MyStruct_ MyStruct;

// + function prototypes using MyStruct*

然后我可以使用指向 MyStruct 的指针而实际上不知道它是什么,例如:MyStruct *x; ,但不是 MyStruct x[3]; (因为编译后不知道 MyStruct 的大小)

然后在源文件 mystruct.c 中定义了 struct MyStruct_

所以我认为你可以尝试替换:

class Bar;

与:

typedef struct Bar_ Bar;

(在 C++ 中你可能只说 typedef Bar_ Bar;)

关于c++ - 如何解决在 C++ header 中声明 typedef 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12212340/

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