我有這個類代碼重構嘗試使用多態性和std ::地圖
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()";
}
};
是什麼讓一個用C++而不是最好的方法B?
我已經嘗試過這樣的:
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))) ;
}
但是這些C在mmap的A中的對象只要auto & b
超出範圍就變成B.
它不工作。如何解決它?
您不能將臨時對象綁定到非常量引用。 – chris
@chris我應該怎麼做,然後在A的構造函數? –