【发布时间】:2020-12-26 23:31:32
【问题描述】:
我想在多个文件中有一个代码。它没有编译,所以我尽可能地简化它并将它合并到一个文件中。现在确实如此。有些逻辑已经消失了。我需要Calculator 才能访问Creature 的功能(以获取统计信息)。我需要Mechanics 才能访问Calculator 函数来计算来自其他Creatures 的影响。以下代码编译:
struct Creature;
struct Calculator {
Creature* creature;
};
struct Mechanics {
Mechanics(Calculator* calculator);
};
Mechanics::Mechanics(Calculator* creature_collision_calculator) {}
struct Creature {
Creature(Calculator* calculator);
Mechanics mechanics;
};
Creature::Creature(Calculator* calculator) :
mechanics(calculator) {
}
int main() {
Calculator calculator;
Creature creature(&calculator);
}
然而,分割成多个文件,不会:
// calculator.h
#pragma once
#include "creature.h"
struct Creature;
struct Calculator {
Creature* creature;
};
// mechanics.h
#include "calculator.h"
struct Mechanics {
Mechanics(Calculator* calculator);
};
// mechanics.cpp
#include "mechanics.h"
Mechanics::Mechanics(Calculator* creature_collision_calculator) {}
// creature.h
#pragma once
#include "mechanics.h"
#include "calculator.h"
struct Creature {
Creature(Calculator* calculator);
Mechanics mechanics;
};
// creature.cpp
#pragma once
#include "creature.h"
struct Creature;
struct Calculator {
Creature* creature;
};
// main.cpp
#include "creature.h"
#include "calculator.h"
int main() {
Calculator calculator;
Creature creature(&calculator);
}
有没有办法解决这个问题?我使用 Visual C++ 编译器。我不想更改设计或将所有内容都放在一个文件中。
【问题讨论】:
-
只需从标题中删除多余的包含
-
最好的方法是从代码中移除循环依赖。
标签: c++ linker linker-errors circular-dependency forward-declaration