提问人:Lendy Zhang 提问时间:8/6/2013 最后编辑:Lendy Zhang 更新时间:4/5/2015 访问量:445
复制构造函数与 pch 中的 const 成员函数冲突?gcc 错误?
Copy constructor conflicts with const member function in pch? A gcc bug?
问:
我是 gcc 的新手,在 gcc-4.7.2/4.7.3 中编译预编译标头时遇到了一个非常奇怪的问题。
代码如下:
FooClass.h
#include <cstddef>
#include <X11/X.h>
#include <xmmintrin.h>
#include <emmintrin.h>
#include <smmintrin.h>
#ifndef FOO_CLASS_ERROR
#define FOO_CLASS_ERROR
class FooClass
{
public:
union
{
struct
{
float x,y,z,w;
};
__m128 v;
};
FooClass( void )
{
}
FooClass( const __m128 _v )
: v( _v )
{
}
FooClass( const FooClass& rhs )
: v( rhs.v )
{
}
FooClass operator -( void ) const;
} __attribute__( (aligned(16)) );
#endif
FooClass.cpp
#include "FooClass.h"
FooClass FooClass::operator -( void ) const
{
return FooClass();
}
编译为 pch:
g++ -Wall -fexceptions -g -msse4.1 -Winvalid-pch -include "FooClass.h" -c FooClass.h -o FooClass.h.gch
g++ -Wall -fexceptions -g -msse4.1 -Winvalid-pch -include "FooClass.h" -c FooClass.cpp -o obj/Debug/FooClass.o
将生成错误:
./pch.h:40:17: error: prototype for ‘FooClass FooClass::operator-() const’ does not match any in class ‘FooClass’
./pch.h:36:14: error: candidate is: FooClass FooClass::operator-() const
我检查了一整个下午,发现:
删除“const”或复制构造函数将解决这些错误。
但我不知道为什么......有人可以告诉我导致此错误的原因吗?或者也许是 GCC 错误?
答:
0赞
Mel Viso Martinez
4/5/2015
#1
这是一个非常奇怪的错误。测试如果内联运算符会发生什么情况:
FooClass operator -( void ) const
{
return FooClass();
}
评论
FooClass.h
__FooClass__
__m128
__m128