根据大家的提示,我最后定位为错误应该是由一个new语句造成的,主要代码罗列如下:
class CGeometry
{
protected:
char* m_Geometryname;
public:
CGeometry()
{
} CGeometry(char* Geometryname)
{
char* m_Geometryname=Geometryname;
}
virtual ~CGeometry()
{
}
public:
virtual void Draw(CDC* pDC)=0;
virtual void Add(CGeometry* p_geometry){}
virtual void Remove(CGeometry* p_geometry){}
};class CSdoLineLineString : public CGeometry
{
public:
virtual ~CSdoLineLineString ()
{
}
virtual void Add(CGeometry* );
virtual void Remove(CGeometry*);
virtual void Draw (CDC* pDC); CSdoLineLineString ()
{ }
CSdoLineLineString(char* Geometryname)
:CGeometry(Geometryname)
{
m_CSdoLineLineString=NULL;
}
private:
vector< CGeometry * >* m_CSdoLineLineString;
};在这里我是想应用设计模式中的composite模式,CGeometry充当component角色,CSdoLineLineString充当composite角色,但是每当要new一个CSdoLineLineString对象时,就会弹出“应用程序错误”的对话框。我的问题是:我的构造函数有问题吗?或者是什么地方应该注意而我没有注意的?本人在线等
class CGeometry
{
protected:
char* m_Geometryname;
public:
CGeometry()
{
} CGeometry(char* Geometryname)
{
char* m_Geometryname=Geometryname;
}
virtual ~CGeometry()
{
}
public:
virtual void Draw(CDC* pDC)=0;
virtual void Add(CGeometry* p_geometry){}
virtual void Remove(CGeometry* p_geometry){}
};class CSdoLineLineString : public CGeometry
{
public:
virtual ~CSdoLineLineString ()
{
}
virtual void Add(CGeometry* );
virtual void Remove(CGeometry*);
virtual void Draw (CDC* pDC); CSdoLineLineString ()
{ }
CSdoLineLineString(char* Geometryname)
:CGeometry(Geometryname)
{
m_CSdoLineLineString=NULL;
}
private:
vector< CGeometry * >* m_CSdoLineLineString;
};在这里我是想应用设计模式中的composite模式,CGeometry充当component角色,CSdoLineLineString充当composite角色,但是每当要new一个CSdoLineLineString对象时,就会弹出“应用程序错误”的对话框。我的问题是:我的构造函数有问题吗?或者是什么地方应该注意而我没有注意的?本人在线等
{
char* m_Geometryname=Geometryname;
}
改为:
CGeometry(char* Geometryname)
{
m_Geometryname=Geometryname;
}
否则,你的CGeometry类中,根本就没有初始化m_Geometryname。