none
warning C4150警告问题 RRS feed

  • 问题

  • mainfrm.cpp(230) : warning C4150: deletion of pointer to incomplete type 'CCourseWareDlg'; no destructor called出现了这样的警告,我是在mainfrm.h 中定义了类CourseWareDlg,没有定义析构函数,该如何修改呢?
    2009年10月18日 4:41

答案

  • 在mainfrm.cpp中添加#include定义 courseWareDlg的文件。
    class xxx;是不知道该类的内存结构的,也就无法调用其成员。一般class xxx;用在.h文件中减少编译依赖。但是在.cpp中使用该成员的时候是需要定义的。 
    麻烦把正确答案设为解答。
    • 已标记为答案 anmy 2009年10月19日 6:30
    2009年10月19日 5:47
    版主

全部回复

  • 朋友,您好
    可否告知您是如何定义和引用这个类的。最好有源码。
    Smile service,common progress!
    2009年10月18日 8:10
  • http://msdn.microsoft.com/en-us/library/ba5dy3f2(VS.71).aspx

    The delete operator is called to delete a type that was declared but not defined, so the compiler cannot find a destructor.
    没有CourseWareDlg的定义。


    麻烦把正确答案设为解答。
    2009年10月19日 1:30
    版主
  • class courseWareDlg : public CDialog
    {
    // Construction
    public:
     void readCourse(); 
     courseWareDlg(CWnd* pParent = NULL);
    };
    这是CourseWareDlg.h中类定义部分。
    如果我把mainfrm.h中的class CCoursewareDlg;(这是我后来加进去的。)去掉的话就出现
    e:\ima\ima\source\intima\mainfrm.h(359) : error C2143: syntax error : missing ';' before '*'
    e:\ima\ima\source\intima\mainfrm.h(359) : error C2501: 'CCourseWareDlg' : missing storage-class or type specifiers
    e:\ima\ima\source\intima\mainfrm.h(359) : error C2501: 'm_pCourseDlg' : missing storage-class or type specifiers
    是不是类有错误导致的呢?
    还有错误e:\ima\ima\source\intima\mainfrm.cpp(181) : error C2065: 'm_pCourseDlg' : undeclared identifier
    e:\ima\ima\source\intima\mainfrm.cpp(228) : error C2541: delete : cannot delete objects that are not pointers
    明明有定义指针m_pCourseDlg,
    代码是
    #ifdef COURSEWARE
    private:
     CCourseWareDlg * m_pCourseDlg; 
     WndInfo  m_infoCourseDlg;
    #endif
    是不是由于上述错误导致的这个错误呀?
    谢谢!

    2009年10月19日 3:27
  • class courseWareDlg : public CDialog
    {
    // Construction
    public:
     void readCourse(); 
     courseWareDlg(CWnd* pParent = NULL);
    };
    这是在courseWareDlg.h 中定义部分的代码
    在Mainfrm.h 中是这样引用的:
    #ifdef COURSEWARE 
    private:
     CCourseWareDlg * m_pCourseDlg; 
     WndInfo  m_infoCourseDlg;
    #endif
    在Main.cpp 中是这样的代码:
    #ifdef COURSEWARE
      m_pCourseDlg = NULL;
      m_infoCourseDlg.bVisible = FALSE;
    #endif
    谢谢!

    2009年10月19日 3:43
  • 在mainfrm.cpp中添加#include定义 courseWareDlg的文件。
    class xxx;是不知道该类的内存结构的,也就无法调用其成员。一般class xxx;用在.h文件中减少编译依赖。但是在.cpp中使用该成员的时候是需要定义的。 
    麻烦把正确答案设为解答。
    • 已标记为答案 anmy 2009年10月19日 6:30
    2009年10月19日 5:47
    版主
  • 哦,谢谢!
    2009年10月19日 5:52