数组工作,而矢量没有。我究竟做错了什么?

时间:2012-08-22 02:59:13

标签: c++ vector

我正在制作一个Tic-tac-toe游戏,我有一个包含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  

3 个答案:

答案 0 :(得分:3)

你不能在C ++ 03中这样做。

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

你应该在电影中使用它。

Board():board(MAX_TILES)
{
}

答案 1 :(得分:1)

只需快速查看,您需要在Board的构造函数中初始化向量,而不是在类定义中。

答案 2 :(得分:0)

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