1
我想知道是否可以傳遞一個映射,其中的數據是一個指向派生類的指針?我可以將引用傳遞給數據是指向派生類的指針的映射嗎?
#include <map>
class B {
public:
private:
int x_;
};
class D : public B {
public:
private:
int y_;
};
typedef std::map<int, B*> mapB_t;
typedef std::map<int, D*> mapD_t;
void foo(mapB_t& inmap) {
;
}
int main() {
mapB_t mapB;
mapD_t mapD;
mapB[0] = new B;
mapD[0] = new D;
foo(mapB);
foo(mapD);
return 0;
}
我收到此編譯器錯誤:
q.cc:在函數 '詮釋主()': q.cc:34:錯誤:的類型的參考無效初始化從 'mapB_t &'錯誤::類型mapD_t' q.cc:22的表達在通過參數1「無效美孚(mapB_t &)」
編譯器錯誤是一個很好的跡象,你不能做到這一點。 – juanchopanza
我認爲解釋應該是即使多態性允許將'D'類型對象傳遞給'B&'類型引用,'mapB_t'和'mapD_t'沒有繼承關係。因此'mapB_t&'不接受'mapD_t'。 –
考慮會發生什麼:'inmap [0] = new B;'會是一場災難。 – molbdnilo