5
gccが新しく、gcc-4.7.2/4.7.3のプリコンパイル済みヘッダーをコンパイルする際に、本当に奇妙な問題が発生しています。以下コピーコンストラクタはpchのconstメンバー関数と競合しますか? gccのバグ?
コード:
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
生成されたエラー:
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としてコンパイル
./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.h'を変更した後で、プリコンパイルされたヘッダーを再作成したことを確認してください。診断のようなサウンドは、実際のヘッダーとPCHの間のデシンクによってわずかなバグがあります。つまり、新しいビルド_を行い、その結果をお知らせください。 –
これは問題ではありませんが、2つの連続したアンダースコア( '__FooClass__')とアンダースコアで始まり大文字で始まる名前は実装に予約されています。それらを使用しないでください。 –
はい、私はきれいなビルドをしました。そして、悪いコードスタイルには申し訳ありませんが、この問題を再現できる最小のコードを作成しようとしているので、コードスタイルは無視してください:-) –