复制构造函数与pch中的const成员函数冲突?一个gcc错误

Copy constructor conflicts with const member function in pch? A gcc bug?

本文关键字:冲突 一个 gcc 错误 函数 成员 构造函数 pch 中的 const 复制      更新时间:2023-10-16

我是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错误?

这是一个非常奇怪的错误。测试如果您内联操作员会发生什么:

FooClass operator -( void ) const
{
    return FooClass();
}