【问题标题】:Include dependency包括依赖
【发布时间】:2016-04-01 06:55:00
【问题描述】:

我有一个 PieceStrategy 类:

#include "QueenStrategy.cpp"
class PieceStrategy {
    void promoteToQueen() {
        this = new QueenStrategy();
    }
}

我有一个继承自它的 QueenStrategy 类:

#include "PieceStrategy.cpp"
class QueenStrategy : public PieceStrategy {}

现在出现循环包含问题。但在这种情况下,我不能使用前向声明。

我该怎么办?

【问题讨论】:

  • 您不应包含 cpp(实现)文件。你为什么要这样做?
  • 执行this = new ... 不会像您期望的那样工作。 *this = ... 可能会部分工作,但它仍然不会使 this 成为新类的实例。
  • 至于你的问题,不要在类中内联定义成员函数,而是在源文件中进行。那么你就不必在"PieceStrategy.h"头文件中包含"QueenStrategy.h"头文件了。
  • 哦等等,您是否包含源文件?不要那样做!改用 header 文件(以 .h 结尾),并将源代码分离到 source 文件中(以 .cpp 结尾)。

标签: c++ oop circular-dependency forward-declaration


【解决方案1】:
  1. 不应包含 cpp 文件,而应包含标头
  2. 你不能分配给this
  3. 选择其他设计。您不应尝试修改策略,而应为实际对象选择另一个使用该策略的策略。

piece.hpp

#include "strategy.hpp"
class Piece
{
    std::unique_ptr<Strategy> strategy;
public:
    static Piece Pawn();
    void PromoteToQueen();
};

piece.cpp

#include "pawn.hpp"
#include "queen.hpp"

Piece Piece::Pawn()
{
    Piece p;
    p.strategy = std::make_unique<PawnStrategy>();
    return p;
}

void Piece::PromoteToQueen()
{
    strategy = std::make_unique<QueenStrategy>();
}

【讨论】:

    猜你喜欢
    • 2014-08-20
    • 2023-03-24
    • 2016-05-18
    • 2013-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-24
    相关资源
    最近更新 更多