【发布时间】:2020-05-12 17:04:44
【问题描述】:
我必须让它们互相使用,但无论我尝试什么,我都无法让它们发挥作用。 我只是想让他们互相访问,经过几天的努力,我决定在这里问。 如果有人能指出我做错了什么以及我应该做什么,那就太好了。
编辑:我决定实施其中一种已经发生堆栈溢出的解决方案,并据此更改了我的代码: 这次我也会分享错误,也许我们可以找出问题所在。
我试图复制这个: Resolve build errors due to circular dependency amongst classes
我使用班级名称“Unit”而不是“A”和“Skill”而不是 “乙”
技能.h
#pragma once
#include <iostream>
#include <vector>
#include "Unit.h"
using namespace std;
class Skill :
public Unit
{
double _val;
Unit* unitPtr;
public:
Skill(double val):_val(val)
{
}
void SetSkill(Unit* unit)
{
unitPtr = unit;
unitPtr->Print();
}
void Print()
{
cout << "Type:B val=" << _val << endl;
}
// Unit* unitPtr;
vector <Skill *> attacks;
vector <Skill *> utilities;
vector <Skill *> movement;
};
单位.h
#pragma once
#include <iostream>
#include <vector>
#include <stdlib.h>
#include <time.h>
using namespace std;
class Skill;
class Unit
{
int _val;
Skill* skillPtr;
public:
Unit(int val) :_val(val)
{
stunned = false;
curSpeed = speed + rand() % 8 + 1;
}
void SetSkill(Skill* skill)
{
skillPtr = skill;
skillPtr->Print(); // COMPILER ERROR: C2027: use of undefined type 'B'
}
void Print()
{
cout << "Type:A val=" << _val << endl;
}
int GetDodge()
{
return dodge;
}
void Setup();
string name;
int maxHP;
//... and other variables
};
单位.cmp
#include "Skill.h"
#include "Unit.h"
void Unit::Setup()
{
heroes.push_back(new Vestal);
heroes.push_back(new Vestal);
heroes.push_back(new Crusader);
heroes.push_back(new Crusader);
monsters.push_back(new BoneSoldier);
monsters.push_back(new BoneDefender);
monsters.push_back(new BoneSoldier);
monsters.push_back(new BoneDefender);
}
稍后在代码中,我向攻击、实用程序和时刻添加了一些东西,我想从 Unit 对象访问它们,如下所示:
英雄[0]->skillPtr->攻击[0]
我希望能够从 Skill.h 访问 Unit.h 中的变量(如 maxHP)
错误:
错误 C2512“技能”:没有合适的默认构造函数可用
错误 C2512 'Unit':没有合适的默认构造函数可用
【问题讨论】:
-
循环依赖相关的帖子太多了。我希望其中一位能给你答案。 stackoverflow.com/search?q=%5Bcpp%5D+circular+dependency
-
是的,有很多相关的帖子,我尝试应用它们,但由于某种原因,无论我尝试什么,我都遇到了不同的错误。过了一段时间我就放弃了
-
您在 Skill.h 中实现了一个解决方案,只需在 unit.h 中使用相同的模式即可。
-
@WernerHenze 我应用了它,但它仍然给我错误:Error C2504 'Unit': base class undefined