看到貴網站上的一篇文章:“在STL列表(Lists)中插入不同類型的對象”。我覺得該文回答還沒有指出問題的本質,所以本人提出我的觀點,懇請指正。本人認為,錯誤產生的原因在於指針轉化過程中,程序沒有指出該指針最初的原型,或者說,由於未找到正確的子類函數地址才發生調用錯誤的,本人原代碼如下:用Dev-cpp的g++編譯通過。
#include<iostream>
#include<algorithm>
#include <vector>
#include <string>
/**
* 父類:synObject
*/
class synObject {
public :
synObject();
string GetClass();
string className;
};
synObject::synObject()
{
className = "synObject";
}
string synObject::GetClass()
{
return className;
}
/**
* 子類1:synPin
*/
class synPin : public synObject {
string pin;
public :
synPin();
void SetPin(string Pin);
string GetPin();
private:
};
synPin::synPin()
{
className = "synPin";
}
void synPin::SetPin(string Pin)
{
pin = Pin;
}
string synPin::GetPin()
{
return pin;
}
/**
* 子類2:synCell
*/
class synCell : public synObject {
string cell;
public :
synCell();
void SetCell(string Cell);
string GetCell();
private:
};
synCell::synCell()
{
className = "synCell";
}
void synCell::SetCell(string Cell)
{
cell = Cell;
}
string synCell::GetCell()
{
return cell;
}
/**
* 系統運行主程序
*/
int main()
{
file://生成對象
synObject * pMyObject;
pMyObject = new synObject;
synPin * pMyPin;
pMyPin = new synPin;
pMyPin->SetPin("myPin");
synCell * pMyCell;
pMyCell = new synCell;
pMyCell->SetCell("myCell");
//插入對象
vector<synObject *> MyVector;
MyVector.empty();
MyVector.push_back(pMyObject);
MyVector.push_back(pMyPin);
MyVector.push_back(pMyCell);
//調用對象
vector<synObject *>::iterator ThisVector=MyVector.begin();
cout<<"Program begin here:"<<endl;
while( ThisVector != MyVector.end() )
{
cout << (**ThisVector).GetClass() << endl ;
if ( (**ThisVector).GetClass().compare("synCell") == 0)
{
cout << (**((synCell**)ThisVector)).GetCell() << endl ;
}
if ( (**ThisVector).GetClass().compare("synPin") == 0)
{
cout << (**(synPin**)ThisVector).GetPin() << endl ;
}
ThisVector++;
}
}
//程序結束