数组有效,而矢量无效。我做错了什么?

Array works while vector doesn't. What am i doing wrong?

本文关键字:错了 什么 无效 有效 数组      更新时间:2023-10-16

我正在制作一个Tic-tac-toe游戏,我有一个包含9个tile类实例的board类,并用它们做一些事情。起初,我使用了一个C数组来创建这些实例Tile board[MAX_TILES],并且一切都很好。然而,我想使用向量,因为它们更安全,所以我对向量std::vector<Tile> board(MAX_TILES);进行了同样的尝试,但我在.cpp文件中遇到了一堆错误,在.h文件中出现了两个错误。

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

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

#ifndef BOARD_H
#define BOARD_H
#include <SFMLWindow.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  

您不能在C++03中执行此操作。

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

你应该在c-tor中使用这个。

Board():board(MAX_TILES)
{
}

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

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