MFC中CObject基类

king229 2010-09-27 08:32:30
当我用CObject基类建立新类的时候,总出现如下错误:
Linking...
Dib.obj : error LNK2001: unresolved external symbol "public: __thiscall CObject::CObject(void)" (??0CObject@@QAE@XZ)
Debug/map1.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

map1.exe - 2 error(s), 0 warning(s)
望高手指点,看到底是什么个情况!
...全文
200 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
昨夜无风 2010-09-28
  • 打赏
  • 举报
回复
clear后,重新编译试试
dingshaofengbinbin 2010-09-28
  • 打赏
  • 举报
回复
你重写了构造函数,但是你的代码中又用了默认的构造函数是吗???重载个默认构造函数就行了。
king229 2010-09-28
  • 打赏
  • 举报
回复
自己顶一下,希望问题早日解决!
king229 2010-09-27
  • 打赏
  • 举报
回复
// Dib.h: interface for the CDib class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_DIB_H__CDD1305D_7D17_4C73_A91F_07410ADC7FA6__INCLUDED_)
#define AFX_DIB_H__CDD1305D_7D17_4C73_A91F_07410ADC7FA6__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#ifndef _INC_DIB
#define _INC_DIB
#define PALVERSION 0x300
#define DIB_HEADER_MARKER ((WORD)('M'<<8)|'B')
#define RECTWIDTH(lpRect) ((lpRect)->right-(lpRect)->left)
#define RECTHEIGHT(lpRect) ((lpRect)->bottom-(lpRect)->top)
#define WIDTHBYTES(bits) (((bits)+31)/32*4)


class CDib : public CObject
{
DECLARE_DYNAMIC(CDib)

//DECLARE_SERIAL(CDib)
public:
CDib();
virtual ~CDib();
protected:
LPBYTE m_pBits;
LPBITMAPINFO m_pBMI;
public:
CPalette *m_pPalette;
public:
DWORD Width() const;
DWORD Height() const;
WORD NumColors() const;
BOOL IsValid() const{return(m_pBMI!=NULL);}
public:
BOOL Paint(HDC,LPRECT,LPRECT)const;
HGLOBAL CopyToHandle() const;
DWORD Save(CFile& file) const;
DWORD Read(CFile& file);
DWORD ReadFromHandle(HGLOBAL hGlobal);
LPBYTE RETURN()
{
return m_pBits;
}
LPBYTE DD(LPBYTE m)
{
m_pBits=m;
return m_pBits;
}
void Invalidate(){Free();}
virtual void Serialize(CArchive& ar);
protected:
BOOL CreatePalette();
WORD PaletteSize() const;
void Free();
public:
#ifdef _DEBUG

virtual void Dump(CDumpContext& dc)const;

#endif
protected:
CDib& operator=(CDib& dib);


};
#endif _INC_DIB
#endif !defined(AFX_DIB_H__CDD1305D_7D17_4C73_A91F_07410ADC7FA6__INCLUDED_)













// Dib.cpp: implementation of the CDib class.
//
//////////////////////////////////////////////////////////////////////
//#include "afx.h"
#include "stdafx.h"
#include "map1.h"
#include "Dib.h"
#include<windowsx.h>
#include<afxadv.h>
#include<io.h>
#include<errno.h>
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
IMPLEMENT_DYNAMIC(CDib,CObject)
//IMPLEMENT_SERIAL(CDib,CObject)
CDib::CDib()
{
m_pBMI=NULL;
m_pBits=NULL;
m_pPalette=NULL;

}

CDib::~CDib()
{
Free();
}
void CDib::Free ()
{
if(m_pBits)
{
GlobalFreePtr(m_pBits);
m_pBits=NULL;
}
if(m_pBMI)
{
GlobalFreePtr(m_pBMI);
m_pBMI=NULL;
}
if(m_pPalette)
{
m_pPalette->DeleteObject();
delete m_pPalette;
m_pPalette=NULL;
}
}
BOOL CDib::Paint (HDC hDC,LPRECT lpDCRect,LPRECT lpDIBRect)const
{
if(!m_pBMI)
return false;
HPALETTE hPal=NULL;
HPALETTE hOldPal=NULL;
if(m_pPalette!=NULL)
{
hPal=(HPALETTE)m_pPalette->m_hObject;
hOldPal=::SelectPalette(hDC,hPal,TRUE);
}

::SetStretchBltMode(hDC,COLORONCOLOR);
BOOL bSuccess;
if((RECTWIDTH(lpDCRect)==RECTWIDTH(lpDIBRect))&&(RECTHEIGHT(lpDCRect)==RECTHEIGHT(lpDIBRect)))
bSuccess=::SetDIBitsToDevice(hDC,lpDCRect->left,lpDCRect->top,RECTWIDTH(lpDCRect),RECTHEIGHT(lpDCRect),lpDIBRect->left,(int)Height()-lpDIBRect->top-RECTHEIGHT(lpDIBRect),0,(WORD)Height(),m_pBits,m_pBMI,DIB_RGB_COLORS);
else
bSuccess=::StretchDIBits(hDC,lpDCRect->left,lpDCRect->top,RECTWIDTH(lpDCRect),RECTHEIGHT(lpDCRect),lpDIBRect->left,lpDIBRect->top,RECTWIDTH(lpDIBRect),RECTHEIGHT(lpDIBRect),m_pBits,m_pBMI,DIB_RGB_COLORS,SRCCOPY);
if(hOldPal!=NULL)
{
::SelectPalette(hDC,hOldPal,TRUE);
}
return bSuccess;
}
BOOL CDib::CreatePalette ()
{
if(!m_pBMI)
return false;
WORD wNumColors=NumColors();
if(wNumColors!=0)
{
HANDLE hLogPal=::GlobalAlloc(GHND,sizeof(LOGPALETTE)+sizeof(PALETTEENTRY)*wNumColors);
if(hLogPal==0)
return false;
LPLOGPALETTE lpPal=(LPLOGPALETTE)::GlobalLock((HGLOBAL)hLogPal);
lpPal->palVersion=PALVERSION;
lpPal-> palNumEntries=(WORD)wNumColors;
for(int i=0;i<(int)wNumColors;i++)
{
lpPal->palPalEntry[i].peRed=m_pBMI->bmiColors[i].rgbRed;
lpPal->palPalEntry[i].peGreen=m_pBMI->bmiColors[i].rgbGreen;
lpPal->palPalEntry[i].peBlue=m_pBMI->bmiColors[i].rgbBlue;
lpPal->palPalEntry[i].peFlags=0;
}
if(m_pPalette)
{
m_pPalette->DeleteObject();
delete m_pPalette;
}
m_pPalette=new CPalette;
BOOL bResult=m_pPalette->CreatePalette(lpPal);
::GlobalUnlock((HGLOBAL)hLogPal);
::GlobalFree((HGLOBAL)hLogPal);
return bResult;
}
return TRUE;
}
DWORD CDib::Width ()const
{
if(!m_pBMI)
return 0;
return m_pBMI->bmiHeader.biWidth;
}
DWORD CDib::Height ()const

{
if(!m_pBMI)
return 0;
return m_pBMI->bmiHeader.biHeight;
}
WORD CDib::PaletteSize ()const
{
if(!m_pBMI)
return 0;
return NumColors() *sizeof(RGBQUAD);
}
WORD CDib::NumColors ()const
{
if(!m_pBMI)
return 0;
WORD wBitCount;
DWORD dwClrUsed;
dwClrUsed=m_pBMI->bmiHeader.biClrUsed;
if(dwClrUsed!=0)
return(WORD)dwClrUsed;
wBitCount=m_pBMI->bmiHeader.biBitCount;
switch(wBitCount)
{
case 1:
return 2;
case 4:
return 16;
case 8:
return 256;
default:
return 0;
}
}
DWORD CDib::Save (CFile& file)const
{
BITMAPFILEHEADER bmfHdr;
DWORD dwDIBSize;
if(m_pBMI==NULL)
return 0;
bmfHdr.bfType=DIB_HEADER_MARKER;
dwDIBSize=*(LPWORD)&m_pBMI->bmiHeader+PaletteSize();
if((m_pBMI->bmiHeader.biCompression==BI_RLE8)||(m_pBMI->bmiHeader.biCompression==BI_RLE4))
{
dwDIBSize+=m_pBMI->bmiHeader.biSizeImage;
}
else
{
DWORD dwBmBitsSize;
dwBmBitsSize=WIDTHBYTES((m_pBMI->bmiHeader.biWidth)*((DWORD)m_pBMI->bmiHeader.biBitCount))*m_pBMI->bmiHeader.biHeight;
dwDIBSize+=dwBmBitsSize;
m_pBMI->bmiHeader.biSizeImage=dwBmBitsSize;
}
bmfHdr.bfSize=dwDIBSize=dwDIBSize+sizeof(BITMAPFILEHEADER);
bmfHdr.bfReserved1=0;
bmfHdr.bfReserved1=0;
bmfHdr.bfOffBits=(DWORD)sizeof(BITMAPFILEHEADER)+m_pBMI->bmiHeader.biSize+PaletteSize();
file.Write((LPSTR)&bmfHdr,sizeof(BITMAPFILEHEADER));
DWORD dwBytesSaved=sizeof(BITMAPFILEHEADER);
UINT nCount=sizeof(BITMAPINFO)+(NumColors()-1)*sizeof(RGBQUAD);
dwBytesSaved+=nCount;
file.Write(m_pBMI,nCount);
DWORD dwBytes=m_pBMI->bmiHeader.biBitCount*Width();
if(dwBytes%32==0)
dwBytes/=8;
else
dwBytes=dwBytes/8+(32-dwBytes%32)/8+(((32-dwBytes%32)%8>0)?1:0);
nCount=dwBytes*Height();
dwBytesSaved+=nCount;
file.WriteHuge(m_pBits,nCount);
return dwBytesSaved;
}
DWORD CDib::Read (CFile& file)
{
Free();
BITMAPFILEHEADER bmfHeader;
if(file.Read((LPSTR)&bmfHeader,sizeof(bmfHeader))!=sizeof(bmfHeader))
return 0;
if(bmfHeader.bfType!=DIB_HEADER_MARKER)
return 0;
DWORD dwReadBytes=sizeof(bmfHeader);
m_pBMI=(LPBITMAPINFO)GlobalAllocPtr(GHND,bmfHeader.bfOffBits-sizeof(BITMAPFILEHEADER)+256*sizeof(RGBQUAD));
if(m_pBMI==0)
return 0;
if(file.Read(m_pBMI,bmfHeader.bfOffBits-sizeof(BITMAPFILEHEADER))!=(UINT)(bmfHeader.bfOffBits-sizeof(BITMAPFILEHEADER)))
{
GlobalFreePtr(m_pBMI);
m_pBMI=NULL;
return 0;
}
dwReadBytes+=bmfHeader.bfOffBits-sizeof(BITMAPFILEHEADER);
DWORD dwLength=file.GetLength();
m_pBits=(LPBYTE)GlobalAllocPtr(GHND,dwLength-bmfHeader.bfOffBits);
if(m_pBits==0)
{
GlobalFreePtr(m_pBMI);
m_pBMI=NULL;
return 0;
}
if(file.ReadHuge(m_pBits,dwLength-bmfHeader.bfOffBits)!=(dwLength-bmfHeader.bfOffBits))
{
GlobalFreePtr(m_pBMI);
m_pBMI=NULL;
GlobalFreePtr(m_pBits);
m_pBits=NULL;
return 0;
}
dwReadBytes+=dwLength-bmfHeader.bfOffBits;
CreatePalette();
return dwReadBytes;
}

#ifdef _DEBUG
void CDib::Dump (CDumpContext& dc)const
{
CObject::Dump(dc);
}
#endif
HGLOBAL CDib::CopyToHandle ()const
{
CSharedFile file;
try
{
if(Save(file)==0)
return 0;
}
catch(CFileException* e)
{
e->Delete();
return 0;
}
return file.Detach();
}
DWORD CDib::ReadFromHandle (HGLOBAL hGlobal)
{
CSharedFile file;
file.SetHandle(hGlobal,FALSE);
DWORD dwResult=Read(file);
file.Detach();
return dwResult;
}
void CDib::Serialize (CArchive& ar)
{
CFile* pFile=ar.GetFile();
ASSERT(pFile!=NULL);
if(ar.IsStoring())
{
Save(*pFile);
}
else
{
Read(*pFile);
}
}
全部代码在此,就是建立了一个CDib类
king229 2010-09-27
  • 打赏
  • 举报
回复
什么库文件?
Eleven 2010-09-27
  • 打赏
  • 举报
回复
库文件没有包含??
傻X 2010-09-27
  • 打赏
  • 举报
回复
这个错误意思就是:public: __thiscall CObject::CObject(void)这个函数有头文件,但是没实现啊
用户 昵称 2010-09-27
  • 打赏
  • 举报
回复
贴代码,现在看起来好像你少写了一个函数。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧