2016-01-13 3 views
1

Я получаю эту ошибку «Ошибка 2 ошибка LNK2005:« public: virtual __thiscall CMemDC :: ~ CMemDC (void) »(?? 1CMemDC @@ UAE @ XZ) уже определены в SkinHeaderCtrl.obj C: \ Users \ anthonyd \ Desktop \ ASPX \ STP \ nafxcwd.lib (afxglobals.obj) STP "ошибка LNK2005: «уже определено в SkinHeaderCtrl.obj»

Я прочитал много подобных вопросов, но не может найти то, что подходит. Может ли кто-нибудь помочь?

// SkinHeaderCtrl.cpp : implementation file 
// 

#include "stdafx.h" 
#include "STP.h" 
#include "SkinHeaderCtrl.h" 
#include "memdc.h" 

#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 

#define BACKGROUND RGB(218,218,218)// was 218,218,218 
#define HEIGHT 16 
///////////////////////////////////////////////////////////////////////////// 
// CSkinHeaderCtrl 

CSkinHeaderCtrl::CSkinHeaderCtrl() 
{ 
} 

CSkinHeaderCtrl::~CSkinHeaderCtrl() 
{ 
} 


BEGIN_MESSAGE_MAP(CSkinHeaderCtrl, CHeaderCtrl) 
    //{{AFX_MSG_MAP(CSkinHeaderCtrl) 
    ON_WM_PAINT() 
    ON_WM_ERASEBKGND() 
    //}}AFX_MSG_MAP 
END_MESSAGE_MAP() 

///////////////////////////////////////////////////////////////////////////// 
// CSkinHeaderCtrl message handlers 

void CSkinHeaderCtrl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) 
{ 

} 

void CSkinHeaderCtrl::OnPaint() 
{ 
    CPaintDC dc(this); // device context for painting 

    CRect rect, rectItem, clientRect; 
    GetClientRect(&rect); 
    GetClientRect(&clientRect); 
    CMemDC memDC(&dc, rect); 
    CDC bitmapDC; 
    bitmapDC.CreateCompatibleDC(&dc); 

// memDC.FillSolidRect(&rect, RGB(76,85,118)); 
    memDC.FillSolidRect(&rect, BACKGROUND); 

    CBitmap bitmapSpan; 
    bitmapSpan.LoadBitmap(IDB_COLUMNHEADER_SPAN); 
    CBitmap* pOldBitmapSpan = bitmapDC.SelectObject(&bitmapSpan); 

// memDC.StretchBlt(rect.left+2, 0, rect.Width(), 12, &bitmapDC, 0, 0, 1, 12, SRCCOPY); 
    memDC.StretchBlt(rect.left+2, 0, rect.Width(), HEIGHT, &bitmapDC, 0, 0, 1, 12, SRCCOPY); 

    bitmapDC.SelectObject(pOldBitmapSpan); 
    bitmapSpan.DeleteObject(); 

    int nItems = GetItemCount(); 

    CBitmap bitmap; 
    CBitmap bitmap2; 
    CBitmap bitmap3; 

Вот skinheaderctrl.h

#if !defined(AFX_SKINHEADERCTRL_H__8B0847B1_B4E6_4372_A62D_038582FFEA5C__INCLUDED_) 
#define AFX_SKINHEADERCTRL_H__8B0847B1_B4E6_4372_A62D_038582FFEA5C__INCLUDED_ 

#if _MSC_VER > 1000 
#pragma once 
#endif // _MSC_VER > 1000 
// SkinHeaderCtrl.h : header file 
// 


///////////////////////////////////////////////////////////////////////////// 
// CSkinHeaderCtrl window 

class CSkinHeaderCtrl : public CHeaderCtrl 
{ 
// Construction 
public: 
    CSkinHeaderCtrl(); 

// Attributes 
public: 

// Operations 
public: 

// Overrides 
    // ClassWizard generated virtual function overrides 
    //{{AFX_VIRTUAL(CSkinHeaderCtrl) 
    //}}AFX_VIRTUAL 

// Implementation 
public: 
    virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct); 
    virtual ~CSkinHeaderCtrl(); 

    // Generated message map functions 
protected: 
    //{{AFX_MSG(CSkinHeaderCtrl) 
    afx_msg void OnPaint(); 
    afx_msg BOOL OnEraseBkgnd(CDC* pDC); 
    //}}AFX_MSG 

    DECLARE_MESSAGE_MAP() 
}; 

///////////////////////////////////////////////////////////////////////////// 

//{{AFX_INSERT_LOCATION}} 
// Microsoft Visual C++ will insert additional declarations immediately before the previous line. 

#endif // !defined(AFX_SKINHEADERCTRL_H__8B0847B1_B4E6_4372_A62D_038582FFEA5C__INCLUDED_) 

Update

На skinheaderctrl.cpp У меня есть включает в себя #include "memdc.h" я хочу, чтобы обновить это для CMemDC?

+2

Возможно, вы определили деструктор в файле заголовка? – NathanOliver

+1

Что это за «memdc.h»? Определяет ли это * другой класс CMemDC? –

+0

@NathanOliver Я добавил заголовок выше. Я лучше с C++, а не C++ – scubieman

ответ

1

CMemDC является внутренним вспомогательным классом в MFC (см. Internal Classes). Вы, по-видимому, определили свой собственный класс CMemDC, в результате чего компоновщик видит два деструктора с тем же именем. Вам нужно будет переименовать свой класс в другое место или поместить его в пространство имен, чтобы избежать конфликта.

+0

Я не видел, где класс CMemDC называется или включен/связан. Я показываю заголовок MEMDC.H с классом CMemDC. Это должно быть правильно? – scubieman

Смежные вопросы