在多个文件中使用继承的正确方法是什么?
我是C ++的新手,我正在尝试为我所有的GDI +相关函数创建一个类,我将在单独的cpp文件中使用它。我尝试了几种方法,并且能够更容易地找到问题,我尝试使用空构造函数。
我用这段代码得到了LNK2019(我拿走了与问题无关的部分,只留下了与WndFuncs类相关的内容):
函数文件头:
#ifndef WNDFUNCS_H
#define WNDFUNCS_H
class WndFuncs
{
private:
public:
WndFuncs(); //declaration
};
#endif
文件本身:
#include "stdafx.h"
#include <windows.h>
#include <commctrl.h>
#include <winuser.h>
#include <gdiplus.h>
#include "WndFuncs.h"
WndFuncs::WndFuncs() //definition
{
}
尝试继承该类的类的标题:
#ifndef SEARCHEDITBOX_H
#define SEARCHEDITBOX_H
class SearchEditBox : public WndFuncs
{
private:
WndFuncs b;
SearchEditBox();
public:
~SearchEditBox();
static SearchEditBox* CreateEditBox(HINSTANCE hInst, HWND hwnd, int pos_x, int pos_y, int width, int height, WndCols const* p_wndCols);
#endif
班级档案:
#include "stdafx.h"
#include "WndCols.h"
#include <windows.h>
#include "WndFuncs.h"
#include "SearchEditBox.h"
SearchEditBox::SearchEditBox()
: b()
{
}
SearchEditBox::~SearchEditBox()
{
if (editBox)
DestroyWindow(editBox);
}
SearchEditBox* SearchEditBox::CreateEditBox(HINSTANCE hInst, HWND hwnd, int pos_x, int pos_y, int width, int height, WndCols const* p_wndCols)
{
SearchEditBox *p_SearchEditBox = new SearchEditBox; //allocating dynamic memory for class (which by itself is declared as pointer)
return p_SearchEditBox;
}
错误是:
LNK2019未解析的外部符号&#34; public:__ thishisall WndFuncs :: WndFuncs(无效)&#34; (?? 0WndFuncs @@ QAE @ XZ)在函数中引用 &#34; private:__ thiscall SearchEditBox :: SearchEditBox(void)&#34; (?? 0SearchEditBox @@ @ AAE XZ)
我已经阅读了MSDN page上的解释和所有要点(甚至尝试将&#34; __ cdecl&#34;放入函数声明中),我确信该函数已声明并定义(在类中)文件;我也试过const int x
认为问题可能在空构造函数中),所以WndFuncs文件应该没问题。
我已阅读this,我的假设是我在继承文件中以错误的方式声明了类(并且链接器因此无法链接到WndFuncs类中的正确函数),但即使我正试图按照here中的描述做所有事情,但它也无济于事。我没有使用任何虚拟成员,因此问题不应与此相关(如该页面所指出的那样)。
当我向WndFuncs类添加析构函数时,我得到2个LNK2019错误,所以问题也不应该与之相关。我也有正确的头文件我认为(试过两个)。
我也尝试过使用其他函数(有或没有构造函数)同样的错误。
答案 0 :(得分:0)
通过以正确的方式将类文件添加到项目中来解决问题:项目&gt;添加课程。之后,引用被正确链接。
我做错了是单独向项目添加文件(通过:文件&gt;添加&gt;文件)。