私はこのクラスを持っています
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 になります。
動いていない。それを修正する方法?