C++中匿名C类型的别名

3

我希望尽量减少对第三方头文件(kiss_fft.h)的依赖。该头文件中定义了一个匿名结构体,我真的很想在我的代码中使用自己的别名(alias)(或一些模糊等效物)来代替它。

我不应该更改的外部定义:

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 是一个变量而不是一种类型,但或许你知道解决方法…?
我已经在这里和互联网上搜索了解决方案,但没有找到合适的。希望这只是我知识上的短板,但也接受可能没有可行的解决方案。提前感谢您的乐观回复!

你是否使用支持C++11特性,如decltype的编译器? - Björn Pollex
在 VC++ 2010 中毫无问题地工作。 - huseyin tugrul buyukisik
5
kiss_fft_cpx不是一个变量,它是一个定义的类型。你的代码没问题,(参见示例)...我认为你的问题可能源于别处;也许你没有正确地包含包含kiss_fft_cpx的头文件? - Eitan T
@Xeo等,非常感谢您提供的示例(http://liveworkspace.org和http://ideone.com很棒!),我会仔细分析我的代码,看看有什么不同之处。 - mosi
1
@EitanT 新手错误!我的include在源文件中而不是头文件中。非常感谢你。 - mosi
显示剩余4条评论
1个回答

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

typedef kiss_fft_cpx FTBuffer;

int main()
{}

既可以作为C++,也可以作为C正常工作,因此问题在于您所做的其他事情(或者更确切地说,没有做的事情)。


我想应该要归功于 EitanT,他指出了我的具体初学者错误,但非常感谢您的回答。 - mosi
@mosi: 对于这种问题,没有任何值得获得的信用。我只是认为(想到)应该回答这个问题。而且,并不是所有在这种情况下能够正常工作的代码也会在C语言中正常工作,尽管在这种特定情况下是可以的。 - Cheers and hth. - Alf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接