看到贵网站上的一篇文章:“在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++;
}
}
//程序结束