Faustas Butkus
Faustas Butkus

Reputation: 311

Visual Studio doesn't include header

Here is my BoardField.h:

#pragma once

#include "ChessPiece.h"
#include "Game.h"
#include <SDL.h>

class BoardField{
private:
    ChessPiece m_piece;
    SDL_Rect m_field;

public:

    friend class Game;
};

And Game.h

#pragma once

#include "BoardField.h"

class Game {
private:
    //members
    BoardField* m_board_fields; // 16th line
    ...

    //methods
    ...
public:
    ...
};

And I'm getting these errors in VS2017 when trying to compile :

Error

Where is the problem? Even tried to create new project it doesn't work anyway.

Upvotes: 0

Views: 70

Answers (1)

Chuck Walbourn
Chuck Walbourn

Reputation: 41127

To break the circular references, you should use a forward reference. Since you are using a raw pointer, that's all that is required:

#pragma once

class BoardField;

class Game {
private:
    //members
    BoardField* m_board_fields;
    ...

    //methods
    ...
public:
    ...
};

Of course, in Modern C++ you should be avoiding raw pointers. For a case like a privately owned heap allocation, unique_ptr is the best option in most cases:

#pragma once

#include <memory>

class BoardField;

class Game {
private:
    //members
    std::unique_ptr<BoardField> m_board_fields;
    ...

    //methods
    ...
public:
    ...
};

You should read this blog post

Upvotes: 2

Related Questions