我在自己的工程中添加了一个类CLei,让它继承自COleDocument,再改成CObject;
问题是我讲CLei不带参的默认构造函数改成带参的构造函数CLei(int row,int col);
后就出现了这样的报错:error C2512: 'CLei' : no appropriate default constructor available
为什么,按照C++的语法来说,我觉得这样子在头文件和源文件都改了之后应该是不会有错的,为什么还是抱错了呢

解决方案 »

  1.   

    你干嘛改呢!
    添加不就行了
    CLei();
    CLei(int row,int col);
    两个都要呗
      

  2.   

    是,我知道可以这样改。不过我就是想知道为什么会报这样的错嘛。我想或者可以顺便搞懂一些MFC内部的东西,不想连为什么错了都不知道
      

  3.   

    http://topic.csdn.net/u/20080608/11/f77a38ec-0605-4d67-93d9-29d2541c845e.html去看看这里
      

  4.   

    改成CLei(int row=0,int col=0);参数带默认值
      

  5.   

    你的基类的构造函数好像是没有参数的。如果你的派生类带了参数的话,那么你不能默认初始化你的基类CLei(int row,int col)
    :CObject()这样试试看或者你先把你的构造函数的定义和实现及基类相关的贴出来看看
      

  6.   

    C++编译器在你没有显示写出构造函数时会自动生成一个默认构造函数,但是一旦你写了任何一个构造函数.编译器就不会为你生成默认构造函数了.所以你在声明对象或者new 一个对象时必须调用你写的构造函数.
      

  7.   

    这是头文件:
    #if !defined(AFX_LEI_H__5BF08417_B71C_4C5D_B3B6_AA9DC2D1A3DC__INCLUDED_)
    #define AFX_LEI_H__5BF08417_B71C_4C5D_B3B6_AA9DC2D1A3DC__INCLUDED_#if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000class Clei : public CObject
    {
    protected:
    DECLARE_DYNCREATE(Clei)
    public:
    Clei(int row,int col);
            virtual ~Clei();
    };
    #endif // !defined(AFX_LEI_H__5BF08417_B71C_4C5D_B3B6_AA9DC2D1A3DC__INCLUDED_)
    这是源文件:
     // lei.cpp : implementation file
    //#include "stdafx.h"
    #include "SLL.h"
    #include "lei.h"#ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif/////////////////////////////////////////////////////////////////////////////
    // CleiIMPLEMENT_DYNCREATE(Clei, CObject)Clei::~Clei()
    {
    }
    Clei::Clei(int row,int col):CObject()
    {}这是报错:
    C:\Documents and Settings\user\桌面\MFC\MFC\动画原理\扫雷\SLL\lei.cpp(17) : error C2512: 'Clei' : no appropriate default constructor available
    报错指向的语句:
    IMPLEMENT_DYNCREATE(Clei, CObject)
      

  8.   

    你的lei.cpp里面有没有 CLei a; 或者 CLei *a = new CLei();的操作?
      

  9.   

    你看一下
    IMPLEMENT_DYNCREATE(Clei, CObject)宏展开就知道了#define IMPLEMENT_DYNCREATE(class_name, base_class_name) \
    CObject* PASCAL class_name::CreateObject() \
    { return new class_name; } \ //这里 你只提供了 clei( int,int ) 而没有默认构造函数所以出错
    IMPLEMENT_RUNTIMECLASS(class_name, base_class_name, 0xFFFF, \
    class_name::CreateObject, NULL)