在国际象棋游戏中无法访问具有实例化对象的方法

时间:2016-07-28 07:47:24

标签: c++ sfml

#pragma once
#include "SFML\Graphics.hpp"

class Tile {

public:
    Tile();
    sf::RectangleShape getRect() const;
    sf::Vector2f getPos() const; 

    void highlightTile();
    bool isTileHighlighted() const;
    void turnOffHighlight();

    void setPos(const sf::Vector2f&);
    void setColor(const sf::Color&);

private:
    sf::RectangleShape m_tile;
    bool m_isHighlighted;
};


#include "Tile.h"

Tile::Tile() : m_tile(sf::Vector2f(0, 0)), m_isHighlighted(false) {
}


#pragma once
#include "SFML\Graphics.hpp"
#include "Windows.h"
#include "Tile.h"   
#include <iostream>

class Grid
{
public:
    Grid();
    Grid(float);
    sf::Vector2f getCoords(int, int) const;
    sf::Vector2i windowCoordsToRowCol(const sf::Vector2i&, float) const;
    bool isGamePieceOnTile(const sf::RectangleShape&) const;

    void drawBoard(Windows&);
    void update(Windows&, const sf::Event&, float);

    ~Grid();
private:
    sf::Vector2f m_gridMap[8][8];
    Tile m_tileSet[8][8];
};


Grid::Grid(float squareDim) 
{
    Tile tilePiece();
    sf::Vector2f position(0, 0);
    int counter = 0; //counter for whether the column is even or odd
    int counter1 = 0; //counter for whether we are on an even or odd row
    for (int row = 0; row < 8; row++) {
        for (int column = 0; column < 8; column++) {

            if (counter1 % 2 == 0 && counter % 2 == 0 || counter1 % 2 != 0 && counter % 2 != 0) {
                tilePiece.setColor(sf::Color::Red);
            }
            else {
                tilePiece.setColor(sf::Color::White);
            }

            tilePiece.setPosition(position);
            m_tileSet[row][column] = new tilePiece;
            m_gridMap[row][column] = sf::Vector2f(tilePiece.getPos().x + squareDim / 2, tilePiece.getPos().y + squareDim / 2);
            position.x += squareDim;
            counter++;
        }
        position.y += squareDim;
        position.x = 0;
        counter = 0;
        counter1++;
    }
}

我在Grid构造函数中实例化Tile,并且不能执行任何tilePiece .___。它说它必须有类型,这个错误对我来说没有意义......

hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh

1 个答案:

答案 0 :(得分:0)

在调用默认(无参数)构造函数时,这是C ++的一个不幸行为:

Tile tilePiece();

这条线做什么?您希望(通过用法)定义类型为tilePiece的变量Tile,并默认初始化它。但是,它的作用是,它定义了一个不带参数的函数tilePiece。例如,请参阅this questionthis one

一个简单的解决方法是省略冗余(并且混淆编译器)大括号:

Tile tilePiece;