Warum bin ich immer error C2061 (syntax error: identifier)?
Okay... ich habe wrestling dieser Fehler für mindestens eine Stunde jetzt. Ich habe meine StaticSprite Klasse Erben, von meinem Component-Klasse. Jedoch, wenn ich versuche zum instanziieren einer StaticSprite Instanz, ich bekomme Fehler-c2016.
Hier mein relevanter code, ich werde mehr posten, wenn es sein muss.
Vielen Dank im Voraus.
StaticSprite.h
#ifndef STATICSPRITE_H_
#define STATICSPRITE_H_
#include "Component.h"
#include <SFML/Graphics.hpp>
#include <string>
namespace GE
{
class Entity;
class Component;
class StaticSprite : public Component
{
private:
sf::Image image;
public:
sf::Sprite Sprite;
StaticSprite();
StaticSprite(std::string filename);
};
}
#endif
Komponente.h
#ifndef COMPONENT_H_
#define COMPONENT_H_
#include "Entity.h"
#include "ComponentType.h"
#include <iostream>
namespace GE
{
class Entity;
class Component
{
protected:
Entity* myEntity;
TYPE type;
public:
Component();
virtual ~Component() {}
Entity* getEntity();
};
}
#endif
main.cpp
int main(int argc, char* argv[])
{
Entity Player;
//The first arg is just a number, and the second is the
//actual component to add to the Entity's component array
Player.addComponent(StaticSprite, new StaticSprite()); //error
//application loop
}
Entity.cpp
//TYPE is just an enumerated type
void Entity::addComponent(TYPE type, void* component)
{
Components[type] = component;
}
ComponentType.h
#ifndef COMPONENTTYPE_H_
#define COMPONENTTYPE_H_
namespace GE
{
enum TYPE{Base = 0, StaticSprite, DynamicSprite,
Physics, Collision, Input, Particle, Audio, Scriptable, MaxType};
}
#endif
Welche Zeile wird der Fehler entsprechen?
Können Sie zeigen Ihnen, wie Sie das Objekt instanziiert wird?
Welche Linie hast du den Fehler?
Können Sie zeigen Ihnen, wie Sie das Objekt instanziiert wird?
Welche Linie hast du den Fehler?
InformationsquelleAutor epicasian | 2010-11-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was ist der Sinn der Erklärung
class Component;
wenn SieComponent.h
überhaupt? Sie können nicht geerbt von einem unvollständigen Typ, so dass diese Erklärung keinen Sinn macht.Eine wilde Vermutung ist, kreisförmigen gehören auch Fragen, aber es ist wirklich schwer zu sagen ohne mehr Informationen. Ich empfehle die Lektüre dieser Artikel auf Organisieren von Codedateien in C und C++ wenn Sie unklar über das Thema.
Edit:
Können Sie nicht passieren die Typ
StaticSprite
auf eine Methode. Das ist wahrscheinlich die Quelle des Fehlers. Zeigen Sie uns die Erklärung deraddComponent
. Was ist der erste parameter Typ?Edit:
Okay, also, was ist die definition von
TYPE
? Ich denke, es ist nur ein typedef fürint
oder so? In diesem Fall sollte es klar sein, dass Sie nicht den Typ zuordnenStaticSprite
zu einemint
.Edit:
Yep, da haben Sie es. Die enumerator
TYPE::StaticSprite
absolut nichts zu tun hat mit der TypStaticSprite
, obwohl Sie den gleichen Namen haben. Geben Sie den enumerator einige andere Namen, zum BeispielT_StaticSprite
, und der folgende code sollte funktionieren:(Ob diese ganze Art Aufzählung, was eine gute Idee ist eine andere Frage.)
InformationsquelleAutor fredoverflow