关于类和错误的帮助:C3861

时间:2010-05-16 13:28:45

标签: c++ visual-studio-2005

有人可以帮我解决这个错误吗?

在“cDef.h”中:

#pragma once

class cDef 
{
public:

    static int STATE_LOGO;
    static int STATE_MENU;

    static int MESSAGE_ENTER;
    static int MESSAGE_UPDATE;
    static int MESSAGE_PAINT;
    static int MESSAGE_EXIT;
};
“GameState.h”中的

#pragma once
#ifndef _GameState_
#define _GameState_
#include "cDef.h"

class MainGame;
class GameState;


class GameState
{
public:

    MainGame *mg;
    int GAME_STATE_DEF;

    virtual void MessengeEnter(int message) = 0;
    virtual void MessengeUpdate(int message,int keys) = 0;
    virtual void MessengePaint(int message,CDC *pDc) = 0;

void StateHandler(int message,CDC *pDc,int keys);

public:
    GameState(void);
public:
    ~GameState(void);
};
#endif
“GameState.cpp”中的

#include "StdAfx.h"
#include "GameState.h"

GameState::GameState(void)
{
    GAME_STATE_DEF = -1;
}

GameState::~GameState(void)
{
}

void GameState::StateHandler(int message,CDC *pDc,int keys)
{
    if(message == cDef.MESSAGE_ENTER)
    {
        MessageEnter(message);
    }

    if(message == cDef.MESSAGE_UPDATE)
    {
        MessageUpdate(message,keys);
    }

    if(message == cDef.MESSAGE_PAINT)
    {
        MessagePaint(message,pDC);
    }
}

错误:

warning C4832: token '.' is illegal after UDT 'cDef'
see declaration of 'cDef'
error C3861: 'MessageUpdate': identifier not found
error C3861: 'MessageEnter': identifier not found
error C3861: 'MessagePaint': identifier not found
...

提前致谢!

3 个答案:

答案 0 :(得分:2)

以下是我曾经学过的那些必须学习来自Java的C ++的学生,并且总是对何时使用::.->感到困惑:

  • A::B表示A是类名称或命名空间名称。
  • A.B表示A是对象或对象的引用。
  • A->B表示A是指针或具有operator->重载类型的对象(a.k.a。“智能指针”)

如果你知道这些,你也可以向后应用它们,这样如果你有一个A和一个B,你就知道它们之间要放什么。

(我认为这些规则必须扩展到C ++ 11,但我不确定。如果你知道,可以随意添加它。)

答案 1 :(得分:1)

使用范围运算符::而不是成员访问运算符.来访问静态变量

示例:

cDef::MESSAGE_ENTER

此外,您应该将cpp文件中cDef的成员初始化为某个值。在这种情况下,enum可能会更好。

答案 2 :(得分:1)

一旦你看到它,这似乎很明显 - 你声明了成员函数

virtual void MessengeEnter(int message) = 0;

但请致电

MessageEnter(message);

(注意MessengeMessage之间的差异