Microsft Visual Studio C ++ 2019使用IMPLEMENT_DYNCREATE编译错误

问题描述

我正在开发一个需要运行多任务的程序,以便可以运行计时器。

以下是包含文件MyRunTimers.h):

#pragma once
#include <afxwin.h>

class MyRunTimers :
    public CObject
{
    int     m_nNum;
    bool m_bDone = FALSE;
    CObject* m_pOwner = NULL;
    bool m_bAutoDelete = FALSE;

    void MyTimerThread();

public:
     DECLARE_DYNAMIC(MyRunTimers)

protected:
    MyRunTimers::MyRunTimers();

    MyRunTimers::~MyRunTimers();

};

这是cpp文件MyRunTimers.cpp):

#include "pch.h"
#include "MyRunTimers.h"

IMPLEMENT_DYNCREATE(MyRunTimers,CObject)

MyRunTimers::MyRunTimers()
{
    m_bDone = FALSE;
    m_pOwner = NULL;
    m_bAutoDelete = FALSE;
}

MyRunTimers::~MyRunTimers()
{
}

当我尝试编译IMPLEMENT_DYNCREATE时以红色突出显示,并且得到:

`E0135 - class "MyRunTimers" has no member "CreateObject"

解决方法

如果类声明(头文件)中有DECLARE_DYNAMIC(MyClass),则定义文件中需要IMPLEMENT_DYNAMIC(MyClass,BaseClass)

或者,如果您实际上需要 IMPLEMENT_DYNCREATE(),则在类定义中应该使用DECLARE_DYNCREATE()

有关差异的讨论,请参见此处:Why should i use DECLARE_DYNAMIC instead of DECLARE_DYNCREATE?