0

私はこのクラスを持っています

struct B {
   B( int x=0 ) { }
   virtual void something() {
          std::cout << "B()";
   }
};

struct A { 
     B b;
     int a;
     A( int a, int b_ ) : a(a), b(b_) {a}
};

別のクラス C を実装しました

 struct C : public B {
   C( int x ) : B(b) { }
   virtual void something() {
          std::cout << "C()";
   }
}; 

A に B の代わりに C を使用させる最良の方法は何ですか?

私はすでにこれを試しました:

struct A { 
         B  & b;
         int a;
         A( int a, B &b_ ) : a(a), b(b_) {a}
    };

しかし、std::map<int, A> コンパイルエラーを出しているものを使用する必要があります:

'A::A' : no appropriate default constructor available.

だから私はこれをしました:

struct A { 
             B  & b;
             int a;
             A( int a=0, B &b_=B() ) : a(a), b(b_) {a}
        };

私のメインで

std::map<int,A> mmap;
for( int i=0;i<5;++i ) {
   auto & b = C();
   mmap.insert( std::make_pair(i,A(i,b) ) ) ;
}

しかし、mmap の A にあるこれらの C のオブジェクトはauto & b、範囲外になるとすぐに B になります。

動いていない。それを修正する方法?

4

1 に答える 1