有人可以帮我解决这个错误吗?
在“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
...
提前致谢!
答案 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);
(注意Messenge
和Message
之间的差异