error C2146: syntax error : missing ';' before identifier 'm_ball' C++, MFC
error C2146: syntax error : missing ';' before identifier 'm_ball' C++, MFC
我有心爱的错误 C2146。我检查了可能的错误,但我无法找到一个错误(据我所知,所有需要的都需要;在右键单击 Ball->GoToDefinition 后,它正确显示了 class 声明)
BallMasterDoc.h
#pragma once
class CBallMasterDoc : public CDocument
{
private:
Ball m_ball; //syntax error : missing ';' before identifier 'm_ball'
Pod m_pod; //syntax error : missing ';' before identifier 'm_pod'
BallMasterDoc.cpp
#include "Pod.h"
#include "Ball.h"
#include "BallMasterDoc.h"
Ball.h
#pragma once
const COLORREF BLUE = RGB(0, 0, 255);
extern int g_iRadius, g_iHeight;
extern int g_iWidth, g_iMaxWidth;//pod...
class Ball
{
public:
Ball();
~Ball();
BOOL Move(CPoint podPosition);
BOOL Start(){ return m_bStart; }
BOOL Collision(){ return m_bCollision; }
BOOL End(){ return m_bEnd; }
CRect GetArea();
private:
BOOL CheckCollision(CPoint podPosition);
float m_fDirection;
int m_iB; // y = ax + B
BOOL m_bUpDown;//true - up
BOOL m_bStart;
BOOL m_bCollision;
BOOL m_bEnd;
CPoint m_ballCentre;
CPoint m_collisionPoint;
};
Pod.h
#pragma once
const COLORREF BLACK = RGB(0, 0, 0);
extern int g_iWidth, g_iMaxWidth;
class Pod
{
public:
Pod();
~Pod();
BOOL MoveLeft();
BOOL MoveRight();
CPoint Position() { return m_Middle; }
private:
CPoint m_Middle;
};
请告诉我哪里出了问题。
编辑
所有包含都在 cpp 文件中(那些由向导和我生成的文件)我只显示这 3 个,因为在这种情况下我不涉及其余部分。我正在从名为 Microsoft Visual C++ Windows Applications by Example 的魔法书中学习 MFC,其中所有内容都包含转到 cpp 文件(即使我觉得它很奇怪而且这本书远不是支持这种风格的最佳向导......)
好的,我把 #include"Ball.h"/"Pod.h"
放在 BallMasterDoc.h 中,它解决了这个问题,但这不是令人满意的答案,因为魔法书中的代码曾经有效(好吧不是这个确切的程序,对我来说大部分代码无论如何都不起作用)但现在没关系
由于 BallMasterDoc.h
取决于对 Ball
和 Pod
类 的了解,因此 header 文件应包括 Ball.h
和 Pod.h
-- 而不是依赖任何 .cpp
包含 BallMasterDoc.h 来包含其他 headers.
您发布的 BallMasterDoc.cpp
看起来不错,因此您的错误可能来自另一个 .cpp
文件,该文件包含 BallMasterDoc.h
但不包含所需的 header header.
我有心爱的错误 C2146。我检查了可能的错误,但我无法找到一个错误(据我所知,所有需要的都需要;在右键单击 Ball->GoToDefinition 后,它正确显示了 class 声明)
BallMasterDoc.h
#pragma once
class CBallMasterDoc : public CDocument
{
private:
Ball m_ball; //syntax error : missing ';' before identifier 'm_ball'
Pod m_pod; //syntax error : missing ';' before identifier 'm_pod'
BallMasterDoc.cpp
#include "Pod.h"
#include "Ball.h"
#include "BallMasterDoc.h"
Ball.h
#pragma once
const COLORREF BLUE = RGB(0, 0, 255);
extern int g_iRadius, g_iHeight;
extern int g_iWidth, g_iMaxWidth;//pod...
class Ball
{
public:
Ball();
~Ball();
BOOL Move(CPoint podPosition);
BOOL Start(){ return m_bStart; }
BOOL Collision(){ return m_bCollision; }
BOOL End(){ return m_bEnd; }
CRect GetArea();
private:
BOOL CheckCollision(CPoint podPosition);
float m_fDirection;
int m_iB; // y = ax + B
BOOL m_bUpDown;//true - up
BOOL m_bStart;
BOOL m_bCollision;
BOOL m_bEnd;
CPoint m_ballCentre;
CPoint m_collisionPoint;
};
Pod.h
#pragma once
const COLORREF BLACK = RGB(0, 0, 0);
extern int g_iWidth, g_iMaxWidth;
class Pod
{
public:
Pod();
~Pod();
BOOL MoveLeft();
BOOL MoveRight();
CPoint Position() { return m_Middle; }
private:
CPoint m_Middle;
};
请告诉我哪里出了问题。
编辑
所有包含都在 cpp 文件中(那些由向导和我生成的文件)我只显示这 3 个,因为在这种情况下我不涉及其余部分。我正在从名为 Microsoft Visual C++ Windows Applications by Example 的魔法书中学习 MFC,其中所有内容都包含转到 cpp 文件(即使我觉得它很奇怪而且这本书远不是支持这种风格的最佳向导......)
好的,我把 #include"Ball.h"/"Pod.h"
放在 BallMasterDoc.h 中,它解决了这个问题,但这不是令人满意的答案,因为魔法书中的代码曾经有效(好吧不是这个确切的程序,对我来说大部分代码无论如何都不起作用)但现在没关系
由于 BallMasterDoc.h
取决于对 Ball
和 Pod
类 的了解,因此 header 文件应包括 Ball.h
和 Pod.h
-- 而不是依赖任何 .cpp
包含 BallMasterDoc.h 来包含其他 headers.
您发布的 BallMasterDoc.cpp
看起来不错,因此您的错误可能来自另一个 .cpp
文件,该文件包含 BallMasterDoc.h
但不包含所需的 header header.