Visual Studio不包含标头

问题描述 投票:0回答:1

这是我的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;
};

和Game.h

#pragma once

#include "BoardField.h"

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

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

我在尝试编译时在VS2017中遇到这些错误:

Error

问题出在哪儿?即使尝试创建新项目,它仍然无法工作。

c++ visual-studio visual-studio-2017
1个回答
2
投票

要打破循环引用,您应该使用前向引用。由于您使用的是原始指针,因此只需要:

#pragma once

class BoardField;

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

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

当然,在Modern C++你应该避免原始指针。对于像私有堆分配这样的情况,unique_ptr在大多数情况下是最佳选择:

#pragma once

#include <memory>

class BoardField;

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

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

你应该阅读this blog post

© www.soinside.com 2019 - 2024. All rights reserved.