问题描述
|
因此,在完成一本入门书籍之后,我正在尝试一些C ++,但是我陷入了困境。我已经制作了一个对象向量,每个对象都有一个SFML圆对象作为成员,我希望main()去绘制这些圆。该向量称为
theBoard
,但是当我尝试访问它时,出现以下错误消息:
error: request for member \'theBoard\' in \'GameBoard\',which is of non-class type \'Board*\'
error: \'theBoard\' was not declared in this scope
我是新手(来自Python两年),所以我确定自己在某个地方犯了错误。这是创建董事会的相关代码:
class Board
{
public:
//These are the member functions.
Board();
~Board();
vector<Space*> CreateBoard();
//This will be the game board.
vector<Space*> theBoard;
//These clusters represent the waiting areas for pieces not yet in the game.
vector<Space*> Cluster1;
vector<Space*> Cluster2;
vector<Space*> Cluster3;
private:
//These integers represent the number of spaces on each row,starting at the top (which is row [0])
vector<int> RowNums;
};
Board::Board()
{
//Fill in RowNums with the right values.
RowNums.push_back(1);
RowNums.push_back(17);
RowNums.push_back(2);
RowNums.push_back(17);
RowNums.push_back(1);
RowNums.push_back(1);
RowNums.push_back(5);
RowNums.push_back(2);
RowNums.push_back(7);
RowNums.push_back(2);
RowNums.push_back(11);
RowNums.push_back(3);
RowNums.push_back(17);
RowNums.push_back(4);
RowNums.push_back(17);
//Then,create the board.
theBoard = CreateBoard();
}
CreateBoard()是一个非常长的函数,它返回指向Space对象的指针向量。我怀疑这里是否存在问题,因为当我尝试访问main()中的Space对象的圆成员时,我收到的唯一错误消息是。在我看来,我好像已经在相关范围内声明了“ 0”,即,作为Board类的数据成员。
我的main()函数很重要:
int main()
{
//This sets up the display window.
sf::RenderWindow App(sf::VideoMode(1200,900,32),\"Malefiz\");
//This creates the board on the heap,and a pointer to it.
Board* GameBoard = new Board();
cout << \"Board made.\";
//This is the game loop.
while(App.IsOpened())
{
//This is used to poll events.
sf::Event Event;
while(App.GetEvent(Event))
{
//This closes the window.
if(Event.Type == sf::Event::Closed)
{
App.Close();
}
}
//This gets the time since the last frame.
//float ElapsedTime = App.GetFrameTime();
//This fills the window with black.
App.Clear(sf::Color(200,200,125));
//This draws the places into the window.
for(int i = 0; i < GameBoard.theBoard.size(); ++i)
{
App.Draw(GameBoard.*theBoard[i].m_Circle);
}
//This displays the window.
App.Display();
}
return EXIT_SUCCESS;
}
解决方法
如果仔细阅读,该错误将非常明显:
error: request for member \'theBoard\' in \'GameBoard\',which is of non-class type \'Board*\'
error: \'theBoard\' was not declared in this scope
第一行告诉您,您有一个指向Board
对象的指针,并且您正在尝试直接访问成员。那是:
Board *p = ...
p.theBoard; // Error,should be p->theBoard,as p is a pointer
另请注意,GameBoard.*theBoard[i].m_Circle
可能不是您想要的,您可能想要want9 am之类的东西(我想是因为缺少一些重要的位)。
, 在main()
函数中,GameBoard
是Board *
,而不是Board
。因此,要访问成员,您需要使用->
而不是.
。例如。:
GameBoard->theBoard.size()
[某些人(我是其中的一个)喜欢用前缀p
或ptr
命名它们的指针变量,以便清楚地表明这种刺激。]
, GameBoard是指向Board对象的指针,因此您需要使用\“-> \”运算符而不是\“。\”运算符来访问其任何成员变量或方法。
, GameBoard
是一个指针,因此语法应为:
for(int i = 0; i < GameBoard->theBoard.size(); ++i)
{
App.Draw((GameBoard->theBoard[i])->m_Circle);
}
由于theBoard
的元素也是指针,因此在访问m_Circle
时我使用了指针符号。