2d向量增量误差

时间:2016-01-20 12:36:25

标签: c++ vector

我试图创建一个简单的扫雷游戏,并在创建棋盘时遇到一些问题。我正在使用2d向量代替2d数组,并且无法增加切片值以查看与切片相邻的多少个地雷。

int Boardsize::createBoard() const {
//  vector < vector<Tile> > board;
impl->board.resize(getLength(), vector<Tile>(getWidth(), Tile()));
for (int i = 0; i < getMines(); i++) {
    int v1 = rand() % getLength();
    int v2 = rand() % getWidth();
    if (impl->board[v1][v2].getMine() == true) i--;
    else  {impl->board[v1][v2].setMine(true);
          if (v1 - 1 > -1) impl->board[v1-1][v2]++;
          if (v1 + 1 < getLength()) impl->board[v1+1][v2]++;
          if (v2 - 1 > -1) impl->board[v1][v2-1]++;
          if (v2 + 1 < getWidth()) impl->board[v1][v2+1]++;
          if ((v1 - 1 > -1) && (v2 - 1 > -1)) impl->board[v1-1][v2-1]++;
          if ((v1 - 1 > -1) && (v2 + 1 < getWidth())) impl->board[v1-1][v2+1]++;
          if ((v1 + 1 < getLength()) && (v2 - 1 > -1)) impl->board[v1+1][v2-1]++;
          if ((v1 + 1 < getLength()) && (v2 + 1 < getWidth())) impl->board[v1+1][v2+1]++;
        }
    }
}

提前设定值长度,宽度和地雷。我打算工作的方式是&#34;检查getMine是否为真,如果是,则游戏结束。如果不是,则isRevealed设置为true,并且图块显示与图块相邻的多少个地雷。但是,我收到了错误:

error: no 'operator++(int)' declared for postfix '++' [-fpermissive]|

我是否需要设置单独的功能来增加内容?我假设board.resize填充了0的向量。 我很感激帮助。

这是&#34; Tile&#34;档案的内容:

namespace Minesweeper {
using namespace std;

class Tile::Tilement {
    int status;
    bool mine;
    int Adjmines;
    friend class Tile;
public:
    Tilement ()
    : status(0), mine(false), Adjmines(0)
    {
    }
};

Tile::Tile() {
    cout << "Tile is being created" << endl;
}
Tile::~Tile() {
    cout << "Tile is being deleted" << endl;
}

void Tile::setMine(int a) {
    tint->mine = true;
}

void Tile::setStatus(int a) {
    if ((a == 0) || (a == 1) || (a == 2)) {
        tint->status = a;
    }
    else {
        #ifdef DEBUG
        cout << "Tile status invalid" << endl;
        #endif // DEBUG
        throw invalid_argument("Invalid tile status");
    }
}

//void Tile::setContent(char r) {
//    tint->content = r;
//}

int Tile::getStatus() const {
    return tint->status;
}

char Tile::getAdjcount() const {
    return tint->Adjmines;
}

char Tile::getMine() const {
    return tint->mine;
}

int Tile::setAdjmines(int a) {
    a = a++;
}

char Tile::getContent() const {
    if (Tile::getMine() == true) {
        return tint->mine;
    }
    else return tint->Adjmines;
}
编辑:我已经改变了一些增量,以便他们现在像这样:

if (v1 - 1 > -1) impl->board[v1-1][v2].incAdjmines; (etc).

incAdjmines函数如下所示:

int Tile::incAdjmines() {
Adjmines = Adjmines + 1;
}

并且......好吧,代码编译,如果没有别的,但是由于另一段代码中的一些错误,我无法判断它是否正常工作。到目前为止,谢谢大家的帮助。

1 个答案:

答案 0 :(得分:3)

您正在{1}对象上调用++,此运算符似乎没有过载。 您可以通过为Tile类重载此运算符来解决您的问题。或者直接告诉您要增加哪个变量,例如:

Tile