0

我正在制作一个井字游戏,我有一个棋盘类,其中包含 9 个 tile 类的实例,并用它们做一些事情。起初我使用 C 数组来创建这些实例Tile board[MAX_TILES],并且一切正常。但是,我想改用向量,因为它们更安全,所以我尝试了与向量相同的方法,std::vector<Tile> board(MAX_TILES);但是我的 .cpp 文件中出现了一堆错误,而 .h 文件中出现了 2 个错误。

我还不习惯向量,因为我们的大学教授教我使用 C 风格的数组。我究竟做错了什么?

这是我的 Board.h 和错误,如果您需要 .cpp,我将提供:

#ifndef BOARD_H
#define BOARD_H

#include <SFML\Window.hpp>
#include <vector>

#include "tile.h"

#define MAX_TILES 9

enum Position
{
    TOP_LEFT        = 0,
    TOP_MIDDLE      = 1,
    TOP_RIGHT       = 2,
    MIDDLE_LEFT     = 3,
    MIDDLE_MIDDLE   = 4,
    MIDDLE_RIGHT    = 5,
    BOTTOM_LEFT     = 6,
    BOTTOM_MIDDLE   = 7,
    BOTTOM_RIGHT    = 8
};

class Board
{
private:
    std::vector<Tile> board(MAX_TILES);
    //Tile board[MAX_TILES];
    void positionTiles();
public:
    //Constructors
    Board();
    Board( TileState tileState );
    //Methods
    void clearBoard();
    void drawBoard(sf::RenderWindow& window);

};

#endif

错误 1 ​​和 2 来自 .h,其他来自 .cpp:

Error   1   error C2059: syntax error : 'constant'  
Error   2   error C2059: syntax error : 'constant'  
Error   3   error C2677: binary '[' : no global operator found which takes type 'Position' (or there is no acceptable conversion)   
Error   4   error C2228: left of '.setTilePosition' must have class/struct/union    
Error   5   error C2677: binary '[' : no global operator found which takes type 'Position' (or there is no acceptable conversion)   
Error   6   error C2228: left of '.setTilePosition' must have class/struct/union    
Error   7   error C2677: binary '[' : no global operator found which takes type 'Position' (or there is no acceptable conversion)   
Error   8   error C2228: left of '.setTilePosition' must have class/struct/unio
Error   9   error C2677: binary '[' : no global operator found which takes type 'Position' (or there is no acceptable conversion)   
Error   10  error C2228: left of '.setTilePosition' must have class/struct/union    
Error   11  error C2677: binary '[' : no global operator found which takes type 'Position' (or there is no acceptable conversion)   
Error   12  error C2228: left of '.setTilePosition' must have class/struct/union    
Error   13  error C2677: binary '[' : no global operator found which takes type 'Position' (or there is no acceptable conversion)   
Error   14  error C2228: left of '.setTilePosition' must have class/struct/union    
Error   15  error C2677: binary '[' : no global operator found which takes type 'Position' (or there is no acceptable conversion)   
Error   16  error C2228: left of '.setTilePosition' must have class/struct/union    
Error   17  error C2677: binary '[' : no global operator found which takes type 'Position' (or there is no acceptable conversion)   
Error   18  error C2228: left of '.setTilePosition' must have class/struct/union    
Error   19  error C2677: binary '[' : no global operator found which takes type 'Position' (or there is no acceptable conversion)   
Error   20  error C2228: left of '.setTilePosition' must have class/struct/union    
Error   21  error C3867: 'Board::board': function call missing argument list; use '&Board::board' to create a pointer to member 
Error   22  error C2109: subscript requires array or pointer type   29
Error   23  error C2228: left of '.setTileState' must have class/struct/union   
Error   24  error C3867: 'Board::board': function call missing argument list; use '&Board::board' to create a pointer to member 
Error   25  error C2109: subscript requires array or pointer type   
Error   26  error C2228: left of '.setTileState' must have class/struct/union   
Error   27  error C2677: binary '[' : no global operator found which takes type 'Position' (or there is no acceptable conversion)   
Error   28  error C2228: left of '.getTileSprite' must have class/struct/union  
Error   29  error C2677: binary '[' : no global operator found which takes type 'Position' (or there is no acceptable conversion)       45
Error   30  error C2228: left of '.getTileSprite' must have class/struct/union  
Error   31  error C2677: binary '[' : no global operator found which takes type 'Position' (or there is no acceptable conversion)   
Error   32  error C2228: left of '.getTileSprite' must have class/struct/union  
Error   33  error C2677: binary '[' : no global operator found which takes type 'Position' (or there is no acceptable conversion)   
Error   34  error C2228: left of '.getTileSprite' must have class/struct/union  
Error   35  error C2677: binary '[' : no global operator found which takes type 'Position' (or there is no acceptable conversion)   
Error   36  error C2228: left of '.getTileSprite' must have class/struct/union  
Error   37  error C2677: binary '[' : no global operator found which takes type 'Position' (or there is no acceptable conversion)       49
Error   38  error C2228: left of '.getTileSprite' must have class/struct/union  
Error   39  error C2677: binary '[' : no global operator found which takes type 'Position' (or there is no acceptable conversion)   
Error   40  error C2228: left of '.getTileSprite' must have class/struct/union  
Error   41  error C2677: binary '[' : no global operator found which takes type 'Position' (or there is no acceptable conversion)   
Error   42  error C2228: left of '.getTileSprite' must have class/struct/union  
Error   43  error C2677: binary '[' : no global operator found which takes type 'Position' (or there is no acceptable conversion)   
Error   44  error C2228: left of '.getTileSprite' must have class/struct/union  
4

3 回答 3

3

你不能在 C++03 中做到这一点。

std::vector<Tile> board(MAX_TILES);

你应该在 c-tor 中使用它。

Board():board(MAX_TILES)
{
}
于 2012-08-22T03:03:46.713 回答
1

快速浏览一下,您需要在 Board 的构造函数中初始化向量,而不是在类定义中。

于 2012-08-22T03:02:59.927 回答
0

C++03 不支持初始化列表。如果这是 C++11,那么您必须使用 {}。

于 2012-08-22T03:02:23.930 回答