首页 > 解决方案 > LNK1169 在 VC2015 C++ 项目中找到一个或多个多重定义的 sysbols

问题描述

我打开一个 VC++6.0 项目并将其升级到 VC2015。它编译到这个最新的错误,我已经阅读了与这个主题相关的帖子,没有找到一个可行的解决方案。这涉及以下类:MemDC

#if !defined(AFX_MEMDC_H__CA1D3541_7235_11D1_ABBA_00A0243D1382__INCLUDED_)
#define AFX_MEMDC_H__CA1D3541_7235_11D1_ABBA_00A0243D1382__INCLUDED_
#pragma once
// MemDC.h : header file
class CMemDC : public CDC
{
public:
    CMemDC(CDC* pDC);
    ~CMemDC();
    CMemDC* operator->() {return this;}
    operator CMemDC*() {return this;}

private:
    CBitmap  m_bitmap;
    CBitmap* m_pOldBitmap;
    CDC*     m_pDC;
    CRect    m_rect;
    BOOL     m_bMemDC;
};
#endif


// MemDC.cpp : implementation of MemDC class
// This class implements a memory Device Context
#include "stdafx.h"
#include "MemDC.h"

CMemDC::CMemDC(CDC* pDC) : CDC()
{
    ASSERT(pDC != NULL);

    m_pDC = pDC;
    m_pOldBitmap = NULL;
#ifndef WCE_NO_PRINTING
    m_bMemDC = !pDC->IsPrinting();
#else
    m_bMemDC = FALSE;
#endif

    if (m_bMemDC) // Create a Memory DC
    {
        pDC->GetClipBox(&m_rect);
        CreateCompatibleDC(pDC);
        m_bitmap.CreateCompatibleBitmap(pDC, m_rect.Width(), m_rect.Height());
        m_pOldBitmap = SelectObject(&m_bitmap);
#ifndef _WIN32_WCE
        SetWindowOrg(m_rect.left, m_rect.top);
#endif
    }
    else // Make a copy of the relevent parts of the current DC for printing
    {
#ifndef WCE_NO_PRINTING
        m_bPrinting = pDC->m_bPrinting;
#endif
        m_hDC = pDC->m_hDC;
        m_hAttribDC = pDC->m_hAttribDC;
    }
}

// Destructor copies the contents of the mem DC to the original DC
CMemDC::~CMemDC()
{
    if (m_bMemDC)
    {
        // Copy the offscreen bitmap onto the screen.
        m_pDC->BitBlt(m_rect.left, m_rect.top, m_rect.Width(), m_rect.Height(),
            this, m_rect.left, m_rect.top, SRCCOPY);

        //Swap back the original bitmap.
        SelectObject(m_pOldBitmap);
    }
    else {
        // All we need to do is replace the DC with an illegal value,
        // this keeps us from accidently deleting the handles associated with
        // the CDC that was passed to the constructor.
        m_hDC = m_hAttribDC = NULL;
    }
}

该类未被项目中的任何其他类引用,但在编译时出现以下错误:

LNK2005 "public: virtual __thiscall CMemDC::~CMemDC(void)" (??1CMemDC@@UAE@XZ) already defined in MemDC.obj  myProj C:\dev\myproj\nafxcwd.lib(afxglobals.obj)

nafxcwd.lib我在我的项目文件夹中也找不到。

我真的不明白问题出在哪里。

标签: c++

解决方案


推荐阅读