2017-01-24 44 views
1

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,怎么办呢?

请指导。

编辑:

解决!感谢扬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

C++定义和声明之间的区别http://stackoverflow.com/questions/1410563/what-is-the-difference-between-a-definition-and-a-claclaration –

+1

你可能会想到一个模板它是显式实例化http://stackoverflow.com/questions/495021/why-can-templates-only-be-implemented-in-the-header-file –

回答

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 

这将停止重复的声明。

+0

请你可以提供任何编译器输出错误 –

+0

看到我编辑的问题。 – sailfish009

+0

查看我编辑的答案 –