1

次のコードがあります。

#include <utility>
#include <list>
#include <iostream>

class Pair: public std::pair<unsigned int, unsigned int>{
    Pair (unsigned int h, unsigned int l) : pair(h,l){};
};
class PairList: public std::list<Pair>{};


int main(int argc, char** argv){

    PairList pl = {{800,400},{800,400}};
}

コマンドラインで v4.6 の MinGW g++ を使用してコンパイルすると
g++ -std=c++0x Test.cpp -o test.exe
、エラーが発生しまし
error: could not convert '{{800, 400}, {800, 400}}' from '<brace-enclosed initializer list>' to 'PairList'

list<pair<unsigned int,unsigned int>> pl = {{800,400},{800,400}};

なんてこと?

4

1 に答える 1

6

次の 2 つの方法があります。

  1. 標準クラスから を継承せず、typedef代わりに次を使用します。

    typedef std::pair<unsigned int, unsigned int> Pair;
    typedef std::list<Pair> PairList;
    
  2. 継承されたクラスに正しいコンストラクターを実装します (std::initializer_list引数として受け取る)。基本クラスのコンストラクターは自動的に使用できません。

標準クラス (いくつかの例外を除く) は継承されるように設計されていないため、最初の選択肢をお勧めします。

于 2012-11-16T11:22:19.507 に答える