2016-12-04 33 views
0

这里是我的子类:构建子类对象的方式有什么问题?

class BackGround :public Object{ 
public: 
BackGround(int y){ 
    character.Load(_T("wallpaper.png")); 
    x = 0; 
    this->y = y; 
    direct = 0; 
    width = 1200; 
    height = 375; 
} 
}; 

我的基类:

class Object{ 
public: 
CImage character;  
int x;    
int y; 
int direct;  
int speed; 
int width;  
int height; 
int Xcenter; 
int Ycenter; 

Object(){} 

void draw(HDC hDC){ 
    character.Draw(hDC, x, y, width, height, 0, direct*height,width, height); 
} 
}; 

当我创建类的背景对象, BackGround Bg1(0); BackGround Bg2(-WINDOW_HEIGHT);

有来的错误:

1> MainFrm.cpp 
1>c:\users\desktop\mfcgame\mfcgame\childview.h(46): error C2059: syntax error: 'const' 
1>c:\users\desktop\mfcgame\mfcgame\childview.h(47): error C2059: syntax error:“-” 
1> MFCGame.cpp 
1>c:\users\desktop\mfcgame\mfcgame\childview.h(46): error C2059: syntax error: 'const' 
1>c:\users\desktop\mfcgame\mfcgame\childview.h(47): error C2059: syntax error:“-” 
1> ChildView.cpp 
1>c:\users\desktop\mfcgame\mfcgame\childview.h(46): error C2059: syntax error: 'const' 
1>c:\users\desktop\mfcgame\mfcgame\childview.h(47): error C2059: syntax error:“-” 
1>c:\users\desktop\mfcgame\mfcgame\childview.cpp(67): error C2228: left of '.draw' must have class/struct/union type 
1>c:\users\desktop\mfcgame\mfcgame\childview.cpp(68): error C2228: left of '.draw' must have class/struct/union type 
1>c:\users\desktop\mfcgame\mfcgame\childview.cpp(116): error C2228: left of '.y' must have class/struct/union type 
1>c:\users\desktop\mfcgame\mfcgame\childview.cpp(118): error C2228: left of '.y' must have class/struct/union type 
1>c:\users\desktop\mfcgame\mfcgame\childview.cpp(120): error C2228: left of '.y' must have class/struct/union type 
1>c:\users\desktop\mfcgame\mfcgame\childview.cpp(122): error C2228: left of '.y' must have class/struct/union type 
+0

“出现错误”不是很有用的信息。请发布确切的错误。 (使用复制和粘贴。) – molbdnilo

+0

对不起,我的错。 – Rachel

+1

从输出窗口中复制消息,而不是从错误列表窗口中复制消息。 (通常有更多更好的信息。)另外,WINDOW_HEIGHT的定义是什么? – molbdnilo

回答

3

我认为你有

class CChildView : public CWnd 
{ 
    // ... 
    BackGround Bg1(0);    // Line 46 
    BackGround Bg2(-WINDOW_HEIGHT); // Line 47 
}; 

这是不正确的声明成员变量的语法。
(编译器认为这些看起来像的成员函数的声明。)

如果您使用C++ 11,你可以写

class CChildView : public CWnd 
{ 
    // ... 
    BackGround Bg1 {0}; 
    BackGround Bg2 {-WINDOW_HEIGHT}; 
}; 

用大括号,或者您也可以在初始化成员构造函数的初始化列表,它适用于所有C++版本:

class CChildView : public CWnd 
{ 
    CChildView(); 
    // ... 
    BackGround Bg1; 
    BackGround Bg2; 
}; 

// ... 

CChildView::CChildView() : Bg1(0), Bg2(-WINDOW_HEIGHT) 
{ 
    // ... 
}