基本クラスから派生クラスへの型キャストに問題があります (オブジェクトがその正確な型であると確信しているため、キャストしています)。これが私のコードです(簡略化):
class MyCollection
{
public:
Element* Get(int i) {
return elements[i];
}
void Add(Element* element) {
//finding i
elements[i] = element;
}
private:
Element* elements[100];
}
class Element {
public:
int ID;
}
class SpecialElement : public Element
{
public:
SpecialElement(char* name) {
this-> Name = name;
}
char* GetName() { return Name; }
private:
char* Name;
}
追加の瞬間にブレークポイントを置き、イミディエイト ウィンドウで Add メソッドの引数をキャストして GetName メソッドを呼び出すと、SpecialElement の MyCollection オブジェクトに追加すると、オブジェクトの名前が返されますが、次のようなことをすると:
void main() {
MyCollection coll = new MyCollection();
coll.Add(new SpecialElement("MyName"));
SpecialElement* foundElement = (SpecialElement*)coll->Get(0);
foundElement->GetName(); //Error
}
なぜだろう?タイプ SpecialElement のオブジェクトが作成されていませんか?