C++循环依赖关系,未声明的标识符
C++ circular dependency, undeclared identifier
我必须对相互使用的类进行类,但无论我尝试什么,我都无法使它们工作。 我只是想让他们互相接触,经过几天的挣扎,我决定在这里问。 如果有人能指出我做错了什么以及我应该做什么,那就太好了。
编辑:我决定实现已经存在堆栈溢出的解决方案之一,并根据此更改了我的代码: 这次我也会分享错误,所以也许我们可以找出问题所在。
我试图复制这个: 解决由于类之间的循环依赖而导致的构建错误
我使用类名"单位"而不是"A"和"技能"而不是 "乙">
技能.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]->技能->攻击[0]
我希望能够从 Skill.h 访问 Unit.h 中的变量(如 maxHP(
错误:
错误 C2512"技能":没有可用的适当默认构造函数错误 C2512"Unit":没有合适的默认构造函数
可用
我是初学者,但也许我可以看到一些可能导致您在这里出现问题的问题。
首先,这里有一个经典的循环依赖关系,Unit.h 包括 Skill.h,其中包括 Unit.h,其中包括 Skill.h 等等。
其次,没有看到任何 #pragma 曾经的预处理指令。这意味着当您继续尝试在单元 CPP 文件中同时包含 Skill.h 和 Unit.h 时,您将尝试多次包含 .h 文件,因为它们相互包含......
第三,您在全局范围内使用命名空间 std。你可以这样做,但不要那样做。
如果您正在寻找更多内容,请尝试有关该主题的出色视频
https://www.youtube.com/watch?v=Zbw58vTotok
相关文章:
- 在顶点着色器中使用 OpenGl 的未声明标识符,我在顶点着色器中绘制三角形时遇到问题
- Google protobuf 时间戳未声明标识符,在 Windows 上具有C++
- 我的函数调用 (C++) 中的未声明标识符
- 具有继承的未声明标识符(运算符 ostream)
- 无法确定 IDE 在 C++ 中说出未声明标识符的原因
- 错误 C2065:'lO':用于声明向量值的未声明标识符?
- 可变参数模板的未声明标识符
- 动态变量上的c++MACRO未声明标识符
- 指向对象的指针的未声明标识符向量
- 简单C++程序上的多个未声明标识符
- C++类"未声明标识符"
- 计算文本文件中的整数数(使用 fin>>x 的未声明标识符)
- 编译器错误 xcode 未声明标识符 C++
- 直接 X 11 纹理 FX 文件错误 X3004 未声明标识符"input"
- GCC 未声明标识符"_asm"
- ios_base类的C++未声明标识符
- 未声明标识符SQL_SS_TABLE
- 使用arrayfire的未声明标识符
- 未声明标识符和标识符未定义是什么意思?如何修复错误
- 在 MacOS 上使用 OpenMPI C++语法时未声明标识符'MPI'