5
我是gcc的新手,在編譯gcc-4.7.2/4.7.3中的預編譯頭文件時遇到了一個非常奇怪的問題。複製構造函數與pch中的const成員函數衝突?一個gcc的錯誤?
下面的碼:
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
我已經檢查過了整整一個下午,發現:
刪除「常量」或拷貝構造函數會解決這些錯誤。
但我不知道爲什麼...有人可以告訴我導致此錯誤的原因嗎?或者它可能是gcc的錯誤?
確保在更改了'FooClass.h'後重新創建了預編譯頭。聽起來像診斷有一個輕微的錯誤,由於真正的標題和PCH之間的異步。即_新建一個_並讓我們知道結果。 –
這不是問題,但包含兩個連續下劃線('__FooClass__')的名稱和以下劃線開頭並帶有大寫字母的名稱保留給實現。不要使用它們。 –
是的,我做了一個乾淨的構建。並且我對不好的代碼風格感到抱歉,但是我只是想製作一個可以重現此問題的最小代碼,所以請忽略代碼風格:-) –