| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1460 人关注过本帖
标题:[已解决]类创建我都遇到问题了,我大菜鸟啊!!!救救我!!!
取消只看楼主 加入收藏
SNAKEQX
Rank: 1
等 级:新手上路
帖 子:112
专家分:3
注 册:2006-4-11
收藏
 问题点数:0 回复次数:6 
[已解决]类创建我都遇到问题了,我大菜鸟啊!!!救救我!!!
创建了一个类
class CEvent
在全局申明
CEvent cEvent_1
编译器报错,
link error
undefined reference to CEvent::~CEvent();

请问这是怎么回事啊??

[[it] 本帖最后由 SNAKEQX 于 2008-2-2 17:08 编辑 [/it]]
搜索更多相关主题的帖子: 大菜 
2008-02-01 09:53
SNAKEQX
Rank: 1
等 级:新手上路
帖 子:112
专家分:3
注 册:2006-4-11
收藏
得分:0 
//    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;
}
2008-02-02 11:01
SNAKEQX
Rank: 1
等 级:新手上路
帖 子:112
专家分:3
注 册:2006-4-11
收藏
得分:0 
/////////////////////////////////////////////////////
//  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;
}
2008-02-02 11:02
SNAKEQX
Rank: 1
等 级:新手上路
帖 子:112
专家分:3
注 册:2006-4-11
收藏
得分:0 
我是菜鸟,这代码写得很傻,不许笑我啊:(
2008-02-02 11:04
SNAKEQX
Rank: 1
等 级:新手上路
帖 子:112
专家分:3
注 册:2006-4-11
收藏
得分:0 
哦,解决了,果然是忘了把代码加进去了......
谢谢各位好人啊;)
2008-02-02 15:23
SNAKEQX
Rank: 1
等 级:新手上路
帖 子:112
专家分:3
注 册:2006-4-11
收藏
得分:0 
恩,知道了,这些细节还要我自己慢慢摸索,今天早上我自己调试的时候发现删除析构函数就行了。但是不知道为什么,我记得C++编程思想里没有说明这个问题。

看来知识是一个积累的过程阿。我相信我把这个代码整个写完,自己的水品又会有一个提高:)谢谢大家。
2008-02-02 15:54
SNAKEQX
Rank: 1
等 级:新手上路
帖 子:112
专家分:3
注 册:2006-4-11
收藏
得分:0 
我看得是英文版的。我觉得写得很好,很和谐阿。本来想中文版买一本看看的。。。。。。翻译的不好么?那我不买了。。。。。
对了,问个小白的问题,什么叫语义阿???

就是说虽然能编译但是你不知道我到底想干什么么?
我就是想做一个弱智RPG游戏,有一个场景,场景里有人可以对话,有石头挡住路,所有的人和石头都是Event,一个10x10(单位block,一个block是16x16的点阵)的场景里最多有10个Events.
场景中cEvents[0]就是主角,由键盘控制,可以上下左右移动,不过还没有实现。其他Events不能动。
2008-02-02 17:05
快速回复:[已解决]类创建我都遇到问题了,我大菜鸟啊!!!救救我!!!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.036885 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved