如何在g ++ 4.7上编译以下代码?如果我将foo
的主体放入内联,它会编译,但我不希望它内联(因为真正的代码要复杂得多)。
struct A
{
void foo();
} __attribute__((__may_alias__));
void A::foo() {}
int main() {return 0;}
错误:
/tmp/test.cpp:6:6: error: prototype for ‘void A::foo()’ does not match any in class ‘A’
/tmp/test.cpp:3:8: error: candidate is: void A::foo()
答案 0 :(得分:1)
将属性直接放在struct
关键字后面:
struct __attribute__((__may_alias__)) A
{
void foo();
};
void A::foo() {}
int main() {return 0;}
这适用于我的g ++ 4.7,而在结束}
之后放置它会产生与你相同的错误。
属性说明符列表可能会显示为
struct
,union
或enum
说明符的一部分。它可以在struct
,union
或enum
关键字之后立即执行,也可以在结束括号之后执行。以前的语法是首选。
(该段的其余部分可能会揭示底层问题是什么,以及在将属性放在成员规范之前它的工作原理。)
当你收到[风滚草]徽章时偶然发现这个问题;)