如何在C++标头中声明typedef
How to work around declaring typedefs in C++ headers
我想知道是否有人可以在不进行重组的情况下,就解决这种情况的方法提出建议:我有一个标头,它包含一个类声明,并声明了它通过引用/指针使用的许多类,与简单地包括这些类的标头相比,这显然是一个很好的做法。
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
的结构声明和typedef没有控制权,那么我可以在MyStruct
的标头中使用任何技术来保持预声明Bar
的精神吗?
我不确定它在C++中是否完全一样,但在C中,我经常声明"不透明"结构,它在头文件(比如mystruct.h
)中有:
typedef struct MyStruct_ MyStruct;
// + function prototypes using MyStruct*
然后我可以使用指向MyStruct
的指针,而不知道它是什么,比如:MyStruct *x;
,但不知道MyStruct x[3];
(因为编译的不知道MyStruct的大小)
然后在源文件CCD_ 11中,我定义了CCD_。
所以我认为你可以尝试替换:
class Bar;
带有:
typedef struct Bar_ Bar;
(您可能只是在c++中说typedef Bar_ Bar;
)
您可以转发声明结构本身:
struct Bar_;
typedef Bar_ Bar;
class MyClass
{
void DoIt( Bar* );
};
这应该可以做到:
struct Bar_;
typedef Bar_ Bar;
相关文章:
- 向前声明指向类的 typedef 指针
- 使用typedef'ed返回类型声明友元函数时出现编译器错误
- 如何创建 typedef 结构的前向声明
- 格式为`int Typedef my_int;`的Typedef声明
- 无法转发声明C typedef结构-正在查找其他建议
- "typedef"类型名称是否可以像"struct"定义那样声明指向结构的指针?
- 具有未声明/未定义类型的 typedef 结构
- 我们可以在声明中的任何位置放置"typedef"说明符吗?
- C++ typedef 函数指针,并在一个语句中声明一个指针
- 错误:使用 tesseract 引擎时 C++ 中的声明'typedef struct tagBLOB BLOB'冲突
- typedef 应该同时在类定义和类声明中吗?
- 向前声明 typedef 保护
- "myStateType"未在此范围内声明,原因 #typedef
- 在 typedef 结构中声明一个数组
- 如何在包含 typedef 时用从右到左的规则解释变量声明
- C 迭代器从Typedef std :: Map作为模板参数声明
- C 使用声明,Typedef和数组类型
- 如何在C++标头中声明typedef
- 使用 FreeTDS 库时出现声明冲突的声明“typedef int RETCODE”错误
- 在c++类中向前声明typedef