我自己定义了一个类并给了一个构造函数
CRectangle:public Object{
  public:
    CRectangle(CRect rect);
  protected;
    CRect m_rect;
   ......}
后面在程序中new一个对象:
CRectangle* pRectItem=new CRectangle(CRect(0x12,0x23,0x34,0x45));
却报错如下:
error C2664: '__thiscall CRectangle::CRectangle(const class CRectangle &)' : cannot convert parameter 1 from 'class CRect' to 'const class CRectangle &'这是为什么呢?在msdn中说可能是由于代码是在以前版本下编译通过的原因,但是具体是什么呢?
如何解决呢?!

解决方案 »

  1.   

    explicit CRectangle ( CRect );
      

  2.   

    我运行的没有问题啊
    class CRectangle : public CObject  
    {
    public:
    CRectangle();
    CRectangle(CRect rect);
    virtual ~CRectangle();
    protected:
        CRect m_rect;
    };
    CRectangle::CRectangle()
    {}
    CRectangle::CRectangle(CRect rect)
    {
    m_rect=rect;
    }
    CRectangle::~CRectangle()
    {}
    CRectangle *angle=new CRectangle(CRect(0x12,0x23,0x34,0x45));
      

  3.   

    请问explicit CRectangle ( CRect );是什么意思?我又试了一次,这次我在CStrokeDoc中实现的
    CRectangle没有问题啊!但是我在单独的文件里实现CRectangle就出现上面的编译错误了!
      

  4.   

    把你单独实现的代码都贴出来 ( .h 和 .cpp )
      

  5.   

    问题已经解决了,好象是因为我原来将CRectangle类声明实现在Rectangle.h和Rectangle.cpp文件中,后来因为某些操作而将此类删除了,又用classwizard实现了一次,而classwizard将它实现在Rectangle1.h和Rectangle1.cpp文件中,但是在包含头文件是用的却是Rectangle.h从而出现了这个问题.
    改过来就没问题了!但是我在想我的那些操作及其带来的问题了