在C++中用类型定义一个具有相同名称的指针的结构

Adi*_*rma 2 c++ pointers typedef

我正在尝试包含一个(.h)头文件,该文件由我的代码中的某些编译器自动生成.以下是自动生成的头文件的代码片段.

typedef struct SequenceOfUint8 {        // Line 69
    struct SequenceOfUint8 *next;
    Uint8           value;
    } *SequenceOfUint8;                 // Line 72
Run Code Online (Sandbox Code Playgroud)

如果我在C代码(gcc编译器)中包含此头文件,它编译正常没有任何错误,但如果尝试将其包含在CPP代码中,g ++编译器会抛出下面提到的错误.

In file included from ssme/src/../include/xxxxx.h:39:0,
                 from ssme/src/ssme.cpp:11:
ssme/src/../include/yyyyy.h:72:4: error: conflicting declaration ‘typedef struct SequenceOfUint8* SequenceOfUint8’
 } *SequenceOfUint8;
    ^~~~~~~~~~~~~~~
ssme/src/../include/yyyyy.h:69:16: note: previous declaration as ‘struct SequenceOfUint8’
 typedef struct SequenceOfUint8 {
                ^~~~~~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)

有人可以告诉如何在C++代码中使用它(如果可能的话,不更改自动生成的代码).

PS:我在CPP文件中使用extern "C" { #include "yyyy.h" }语句包含头文件,仍然没有运气.

Sto*_*ica 6

您不能像在C++代码中那样使用它.这是另一个实例,其中C和C++是两种不同的语言.

C中的标记命名空间是独立的,在C++中则不是.它在C++中甚至不存在.

包装extern "C"也不会使C++编译器将标头视为C代码.这不是预期的功能.标头必须是独立的有效C++,它根本就不是.

您将需要编写一个C包装器,它公开了一个C++兼容的API.