Visual Studio error C2061: Syntaxfehler: Bezeichner
//Species.h
#pragma once
#include <iostream>
#include <string>
using namespace std;
class Species
{
protected:
int HP, GroundAttack, AirAttack, MoveMode;
public:
};
//Protoss.h
#pragma once
#include "Species.h"
#include "Terran.h"
class Protoss : public Species
{
protected:
int PS;
public:
virtual void Input();
virtual void Output();
void B_AbilityAttack_A(Terran *);
};
//Terran.h
#pragma once
#include "Species"
#include "Protoss.h"
class Terran : public Species
{
public:
virtual void Input();
virtual void Output();
void A_AbilityAttack_B(Protoss *);
};
"error C2061: Syntaxfehler : Bezeichner 'Terraner'"
"error C2061: Syntaxfehler : Bezeichner 'Protoss'"
Fehler in: void A_AbilityAttack_B(Protoss *) und void B_AbilityAttack_A(Terraner *)
Wie es zu lösen ist?
Nach fix In einer Methode der Klasse war, schrieb ich:
void Protoss::B_AbilityAttack_A(Terran *x)
{
if (this->AbilityAttack() == 0 && x->GetMoveMode() == 0)
{
x->SetHP(x->GetHP() - this->GAttack());
}
else if (this->AbilityAttack() == 1 && x->GetMoveMode() == 0)
{
x->SetHP(x->GetHP() - this->GAttack());
}
else
{
x->SetHP(x->GetHP() - this->AAttack());
}
}
Und Fehler in x : "Zeiger auf unvollständigen Klasse-Typ ist nicht erlaubt"
So, wie man es beheben?
- Sie können entfernen
#include "Protoss.h"
vom Terran.h und statt schreibenclass Protoss;
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie eine zirkuläre Abhängigkeit. Entfernen Sie die include von
Protoss
durchTerran
und Umgekehrt, die Verwendung forward-Deklaration statt.Dies funktioniert, da brauchen Sie nicht den vollen Klassen-Definitionen, denn die Argumente sind Zeiger, die Sie gerade brauchen, um vorwärts zu erklären.
Species*
kann anstelle von verwendet werdenTerran*
undProtoss*
, da diese Klassen sind abgeleitet von derSpecies
Klasse. In diesem Fall gibt es keine Notwendigkeit zu verwenden vorwärts-Deklaration.#include
von der.h
- Datei an, die eine vorwärts-Deklaration, müssen Sie die#include
zu den.cpp
- Datei, so erhalten Sie die definition der Klasse, wenn Sie versuchen, mit diesem Typ.