9

これに答えるためにどのくらいの情報が必要なのか正確にはわかりませんので、さらに情報が必要な場合は教えてください.

突然このメッセージに遭遇したときに、私が書いた大きなコードを変更しています: error: type 'integer' is not a direct base of 'integer'. 私はそれが継承の問題であることを知っていますが、他のクラスを継承していません。

この問題を引き起こしているコードは

integer(const std::string & val, uint16_t base): integer(val.begin(), val.end(), base) {}

integer(iterator start, iterator end, uint16_t base) 

が定義されています。

これを修正するにはどうすればよいですか?

編集: -std=c++0x でコンパイルしています。答えによると、コンパイラが古い場合を除き、コンパイルできるはずです: gcc 4.6.2 と思います

4

4 に答える 4

4

同じような他のコンストラクターを呼び出すことは許可されていませんclass(C++11 には委譲コンストラクターがあります)。クラスのメンバーを初期化する必要があります (おそらく他のコンストラクターで行ったように)。

編集:

C++0x/C++11 Support in GCC に従って、委譲コンストラクターは GCC v4.7 で実装されました。

于 2012-07-09T08:03:33.377 に答える
3

別のコンストラクターの初期化リストで同じクラスのコンストラクターを呼び出すことはできません (C++03 の場合)。ただし、それに応じてメンバーを初期化できます。

integer(const std::string & val, uint16_t base): _start(val.begin())
                                                 _end(val.end())
                                                 _base(base)
{}
于 2012-07-09T08:03:04.063 に答える
1

g ++-4.6 ("コンストラクターの委任|N1986 |いいえ")ではサポートされていませんが、4.7ではサポートされています。

于 2012-07-09T08:12:09.223 に答える