2016-07-28 6 views
-1
#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++; 
    } 
} 

グリッドコンストラクタでTileをインスタンス化して、tilePiece .___を実行できません。それはクラス型を持たなければならないと言うと、そのエラーはこれがデフォルト(パラメータなしの)コンストラクタ呼び出し時にC++の不幸な動作ですチェスゲームでインスタンス化されたオブジェクトを持つメソッドにアクセスできません。

hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh

答えて

0

...私には意味がありません。

Tile tilePiece(); 

ラインは何をしていますか? (用途によって)タイプTileの変数tilePieceを定義し、デフォルトでそれを初期化したいと思うでしょう。しかし、これは何もしません、パラメータを取らない関数tilePieceを定義しています。たとえばthis questionまたはthis oneを参照してください。

単純な修正は(コンパイラへと紛らわしい)冗長を省略することでブレース:

Tile tilePiece; 
関連する問題