如何实现WTL头文件?

时间:2017-01-24 01:33:29

标签: c++ wtl

WTL是模板库,所以我必须在模板库头文件中实现它。

我想在.cpp文件中实现我的逻辑,否则,我将不得不编写一个巨大的头文件。

例如,在MainFrm.h中

// ...
// MainFrm.h
class CMainFrame : 
    public CFrameWindowImpl<CMainFrame>, 
    public CUpdateUI<CMainFrame>,
    public CMessageFilter, public CIdleHandler
{
  //...
  void function1()
  {
    //...
  }

  void function2()
  {
    //...
  }
}

我希望在function1()中有function2()myfunction.cpp,该怎么做?

请指导。

编辑:

解决!感谢Jan S.我已将myfunction.cpp包含在WTL项目中并添加了一些行:

为MainFrm.h:

// ...
// MainFrm.h
#if 1
#include <atlframe.h>
#include <atlsplit.h>
#include <atlctrls.h>
#include <atlctrlw.h>
#include <atlctrlx.h>
#include "sampleView.h"
#include "resource.h"
#endif

// MainFrm.h
class CMainFrame : 
    public CFrameWindowImpl<CMainFrame>, 
    public CUpdateUI<CMainFrame>,
    public CMessageFilter, public CIdleHandler
{
  //...
  void functionx();
  //...
};

myfunction.cpp:

// myfunction.cpp
#include "stdafx.h" 
#include "MainFrm.h"
void CMainFrame::functionx()
{
  //...
}

1 个答案:

答案 0 :(得分:1)

在标题中输入声明

// MainFrm.h
class CMainFrame : 
    public CFrameWindowImpl<CMainFrame>, 
    public CUpdateUI<CMainFrame>,
    public CMessageFilter, public CIdleHandler
{
  //...
  void functionx();
  //...
};

在.cpp文件中输入定义

#include MainFrm.h

void CMainFrame::functionx()  
{  
    // more code  
} 

编译错误

您似乎缺少WTL标头包含

#include <atlframe.h>
#include <atlsplit.h>

偏离主题但是,在标题中确保您有

#pragma once

#ifndef UNIQUE_HEADER_NAME
#define UNIQUE_HEADER_NAME
//header code
#endif

这将停止重复声明。