WTL头文件外如何实现?
Posted
技术标签:
【中文标题】WTL头文件外如何实现?【英文标题】:How to implement out of WTL header file? 【发布时间】:2017-06-08 16:28:29 【问题描述】:WTL是模板库,所以我必须在模板库头文件中实现它。
我想在.cpp
文件中实现我的逻辑,否则我将不得不编写一个巨大的头文件。
例如,在 MainFrm.h
// ...
// MainFrm.h
class CMainFrame :
public CFrameWindowImpl<CMainFrame>,
public CUpdateUI<CMainFrame>,
public CMessageFilter, public CIdleHandler
//...
void function1()
//...
void function2()
//...
我想在myfunction.cpp
中有function1()
和function2()
,怎么办?
请指导。
编辑:
解决了!感谢 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()
//...
【问题讨论】:
c++定义和声明***.com/questions/1410563/…的区别@ 在显式实例化模板之前,您可能正在考虑模板***.com/questions/495021/… 【参考方案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
这将停止重复声明。
【讨论】:
#ifndef 应该在头文件的开头,#endif 应该在头文件的末尾以上是关于WTL头文件外如何实现?的主要内容,如果未能解决你的问题,请参考以下文章
WTL利用CIndirectDialogImpl实现InputBox