新微赢技术网

标题: [已解决]类创建我都遇到问题了,我大菜鸟啊!!!救救我!!! [打印本页]

作者: 枫之泪-天涯    时间: 2009-11-3 04:01
标题: [已解决]类创建我都遇到问题了,我大菜鸟啊!!!救救我!!!
创建了一个类
class CEvent
在全局申明
CEvent cEvent_1
编译器报错,
link error
undefined reference to CEvent::~CEvent();

请问这是怎么回事啊??
作者: 孤独与夜缠绵    时间: 2009-11-3 04:01
谢谢你把你的代码发一下  虽然你给了个"接口"但是 我们也没法连接到你的函数
作者: 单身中    时间: 2009-11-3 04:01
//    MAIN
#include <windows.h>
#include <iostream>
#include <stdlib.h>
using namespace std;
#include "Class.h"
////////////////////////////////////////////////////////////////////////////////
//  Declare Windows procedure  
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);

////////////////////////////////////////////////////////////////////////////////
//  Global variable  
char szClassName[ ] = "WindowsApp";
unsigned int unData[16] =  {0x0000, 0x0180, 0x03c0, 0x07e0,
                            0x03c0, 0x0180, 0x07e0, 0x05a0,
                            0x0990, 0x0990, 0x1188, 0x0240,
                            0x0420, 0x0420, 0x1818, 0x0000};

CScene *pScene=NULL;    // point to scene

////////////////////////////////////////////////////////////////////////////////
// Function protocols
void DrawScene(HDC hdc, CScene *pscene);    // All events will be drawn
bool CreateScene();
bool DeleteScene();


////////////////////////////////////////////////////////////////////////////////
//  WinMain
int WINAPI WinMain (HINSTANCE hThisInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR lpszArgument,
                    int nFunsterStil)

{
    HWND hwnd;               /* This is the handle for our window */
    MSG messages;            /* Here messages to the application are saved */
    WNDCLASSEX wincl;        /* Data structure for the windowclass */

    /* The Window structure */
    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = szClassName;
    wincl.lpfnWndProc = WindowProcedure;      /* This function is called by windows */
    wincl.style = CS_DBLCLKS;                 /* Catch double-clicks */
    wincl.cbSize = sizeof (WNDCLASSEX);

    /* Use default icon and mouse-pointer */
    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;                 /* No menu */
    wincl.cbClsExtra = 0;                      /* No extra bytes after the window class */
    wincl.cbWndExtra = 0;                      /* structure or the window instance */
    /* Use Windows's default color as the background of the window */
    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;

    /* Register the window class, and if it fails quit the program */
    if (!RegisterClassEx (&wincl))
        return 0;

    /* The class is registered, let's create the program*/
    hwnd = CreateWindowEx (
           0,                   /* Extended possibilites for variation */
           szClassName,         /* Classname */
           "Windows App",       /* Title Text */
           WS_OVERLAPPEDWINDOW, /* default window */
           CW_USEDEFAULT,       /* Windows decides the position */
           CW_USEDEFAULT,       /* where the window ends up on the screen */
           180,                 /* The programs width */
           240,                 /* and height in pixels */
           HWND_DESKTOP,        /* The window is a child-window to desktop */
           NULL,                /* No menu */
           hThisInstance,       /* Program Instance handler */
           NULL                 /* No Window Creation data */
           );

    /* Make the window visible on the screen */
    ShowWindow (hwnd, nFunsterStil);
    /* Run the message loop. It will run until GetMessage() returns 0 */
    while (GetMessage (&messages, NULL, 0, 0))
    {
        /* Translate virtual-key messages into character messages */
        TranslateMessage(&messages);
        /* Send message to WindowProcedure */
        DispatchMessage(&messages);
    }
    /* The program return-value is 0 - The value that PostQuitMessage() gave */
    return messages.wParam;
}

////////////////////////////////////////////////////////////////////////////////
//  This function is called by the Windows function DispatchMessage()  

LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    HDC hdc;
    PAINTSTRUCT ps;
    switch (message)                  /* handle the messages */
    {
        case WM_CREATE:
            CreateScene();               
            break;
            
        case WM_DESTROY:
            DeleteScene();           
            PostQuitMessage (0);       /* send a WM_QUIT to the message queue */
            break;
            
        case WM_PAINT:
            hdc = BeginPaint (hwnd, &ps);
            DrawScene(hdc, pScene);
            MoveToEx(hdc,0,160,NULL);
            LineTo(hdc,168,160);
            LineTo(hdc,168,0);     
            EndPaint (hwnd, &ps);
            break;
        default:                      /* for messages that we don't deal with */
            return DefWindowProc (hwnd, message, wParam, lParam);
    }
    return 0;
}////

////////////////////////////////////////////////////////////////////////////////
//  Functions
void DrawScene(HDC hdc, CScene *pscene)
{
    int x,y;   
    for (int l=0;l<pscene->nEventNum;l++)
    {
        x=pscene->cEvents[l].x*16;// Get Event X Unit "Pixels"
        y=pscene->cEvents[l].y*16;// Get Event Y Unit "Pixels"
        for(int j=0;j<16;j++)
        {
            unsigned int nFilter=0x8000;// Filter to get every bit of data
            for (int i=0;i<16;i++)
            {
                // Bit is 1 to draw; bit is 0 not to draw
                if (nFilter & pscene->cEvents[l].unData[j])
                                SetPixel(hdc,x+i,y+j,RGB(0,0,0));
                nFilter=nFilter>>1;
            }            
        }////   
    }////////      
}////////////

bool CreateScene()
{
    pScene=new CScene;    // Create a new scene
    pScene->SetEventNum(10);
    for (int i=0;i<10;i++)
        pScene->cEvents[i].InputData(unData);
    for (int i=0;i<10;i++)
        pScene->SetEventPosition(0,i,i);
    return true;
}

bool DeleteScene()
{
    delete pScene;
}
作者: 怎么可能    时间: 2009-11-3 04:01
/////////////////////////////////////////////////////
//  Ver 0.01
//  All objects are Evevts.
//  这里出错阿
class CEvent
{
    public:
    // Variables   
    int x,y;                    // Unit "Block"
    unsigned int unData[16];    // Pixels to draw
                                // 16x16
    // Construction & Destrucion
    CEvent()
    {
        x=0;y=0;
        for (int i=0;i<16;i++) unData[i]=0;    //No pixels
    }  
    ~CEvent();  //就是这里有什么问题啊,我真的搞不懂了
      
    //Functions
    inline void InputData(unsigned int *unInput)
    {
        for (int i=0;i<16;i++) unData[i]=unInput[i];
    }   
   
};  

////////////////////////////////////////////////////////////////////
//  A scene is a group of the Events
//
class CScene    // A scene can only has 10 events as MAX
{
    public:
    // Variables
    int nWidth,nHeight;         // 10x10 blocks
    int nEventIndex[10][10];    // Events position
    int nEventNum;              // Current MAX event number   
    CEvent cEvents[10];         // 10 events
                                // cEvents[0] is controlled
    // Construction & Destrucion
    CScene()
    {
        nEventNum=0;
        nWidth=160;nHeight=160;
        for(int j=0;j<10;j++)
                for (int i=0;i<10;i++) nEventIndex[j][i]=-1;
    }
   
    // Functions
    inline void SetEventNum(int n);  // Add events
    inline void InitialEvent(int index, unsigned int *un); // Ini data to draw
    bool SetEventPosition(int nx, int ny, int index);      // Set positiion                                                      
};   

///////////////////////////////////////////////////////////////////////////////
//
inline void CScene::InitialEvent(int index, unsigned int *un)
{
    cEvents[index].InputData(un);
}  

bool CScene::SetEventPosition(int nx, int ny, int index)
{
    // Vary both nEventIndex[10][10]
    // And cEvents[?].x
    nEventIndex[ny][nx]=index;
    cEvents[index].x=nx;
    cEvents[index].y=ny;
}   

inline void CScene::SetEventNum(int n)
{
    if(n<11) nEventNum=n;
    else nEventNum=10;
}
作者: 秋燕子_児    时间: 2009-11-3 04:01
我是菜鸟,这代码写得很傻,不许笑我啊:(
作者: 踏破^ō^凌云    时间: 2009-11-3 04:01
你不是没定义析构函数么???把声明删了看看...
这部分的语义我不太了解.
作者: 欠你一滴泪    时间: 2009-11-3 04:01
有声明无定义,就这么简单,LZ复习一下C++语法吧
作者: liu    时间: 2009-11-3 04:01
哦,解决了,果然是忘了把代码加进去了......
谢谢各位好人啊;)
作者: 独寻醉    时间: 2009-11-3 21:05
一楼的位置好啊..我考,这是一种文明,我指 的是回帖。




欢迎光临 新微赢技术网 (http://bbs.weiying.cn/) Powered by Discuz! X3.2