2012-08-16 106 views
3

我很想尽量减少对第三方头文件的依赖(kiss_fft.h)。在头文件中定义了一个匿名结构,我真的很想在我的代码中交替使用我自己的别名(或某些模糊的等价物)。匿名c类型的C++别名

外部定义,我不该改变:

typedef struct { 
    float r; 
    float i; 
} kiss_fft_cpx; 

我第一次尝试:

typedef kiss_fft_cpx FTBuffer; 
// yields error: 'kiss_fft_cpx' does not name a type 

我的第二次尝试:

struct FTBuffer : public kiss_fft_cpx {}; 
// yields error: expected class-name before '{' token 

我想我的问题是,kiss_fft_cpx是一个变量而不是一个类型,但也许有一个工具你知道...吗?

我在这里搜索了解决方案,并在更广泛的网络上,但没有什么是跳出来的。我希望这只是我的知识上的一个缺口,但接受可能没有可取的解决方案。提前乐观感谢!

+0

您是否正在使用支持C++ 11功能(如“decltype”)的编译器? – 2012-08-16 14:28:08

+0

'kiss_fft_cpx'是一个类型名称,应该可以用作基类和'typedef's。 [Example。](http://liveworkspace.org/code/04fe7d6c236d4f9e59029b8440048885) – Xeo 2012-08-16 14:28:46

+0

在VC++ 2010中无问题工作 – 2012-08-16 14:30:13

回答

0
typedef struct { 
    float r; 
    float i; 
} kiss_fft_cpx; 

typedef kiss_fft_cpx FTBuffer; 

int main() 
{} 

既适用于C++又适用于C,所以问题是你做的其他事情(或者说,不要做)。

+0

我想信用应该去EitanT,他们的手指权利于我的具体菜鸟错误,但非常感谢您的答案。 – mosi 2012-08-16 15:36:22

+0

@mosi:对于这种性质的问题,没有功劳。我只是认为(想到)这个问题应该得到回答。不,这不是一个给定的代码也可以很好地作为C,虽然它在这种情况下。 – 2012-08-16 15:40:14