1

ロジックが重複していないため、コンストラクターに初期化リスト内の他のコンストラクターを呼び出させようとしています。.h ファイルは次のようになります。

class Button : public Component
{
public:
    Button(int x, int y, int width, int height, string normalSrc, string hoverSrc, string downSrc);
    Button(int x, int y, int width, int height, string normalSrc, string hoverSrc, string downSrc, Uint8 r, Uint8 g, Uint8 b);
    Button(int x, int y, int width, int height, string src) : Button(x, y, width, height, src, src, src) { }
    Button(int x, int y, int width, int height, string src, Uint8 r, Uint8 g, Uint8 b) : Button(x, y, width, height, src, src, src, r, g, b) { }
    ~Button();

しかし、コンパイルしようとすると (追加のコンパイラ フラグとして -std=c++0x を使用して)、次のエラーが発生します。

In file included from /home/villages/Desktop/ogam-january-pipes/src/Vesper/Ui/Button.cpp:8:0:
/home/villages/Desktop/ogam-january-pipes/src/Vesper/Ui/Button.h: In constructor ‘Button::Button(int, int, int, int, std::string)’:
/home/villages/Desktop/ogam-january-pipes/src/Vesper/Ui/Button.h:29:60: error: type ‘Button’ is not a direct base of ‘Button’
/home/villages/Desktop/ogam-january-pipes/src/Vesper/Ui/Button.h: In constructor ‘Button::Button(int, int, int, int, std::string, Uint8, Uint8, Uint8)’:
/home/villages/Desktop/ogam-january-pipes/src/Vesper/Ui/Button.h:30:87: error: type ‘Button’ is not a direct base of ‘Button’
make[2]: *** [CMakeFiles/Villages.dir/src/Vesper/Ui/Button.cpp.o] Error 1
make[1]: *** [CMakeFiles/Villages.dir/all] Error 2
make: *** [all] Error 2

私は何を間違っていますか?

ありがとう!

4

1 に答える 1

5

私は何を間違っていますか?

間違ったコンパイラ/バージョンを使用しています。デリゲート コンストラクター機能はC++11の機能であり、すべてのコンパイラーがまだ対応しているわけではありません。

この表 によると、 GCC4.7以降、Clang3.0以降、MSVCは2012 年 11 月 CTP以降をサポートしています。

于 2013-01-06T23:26:59.457 に答える