Sichtbarkeit von Klassen!?

sberger

Grünschnabel
Hallo,
nach langem Probieren habe ich es immer noch nicht geschafft folgende Compilermeldung wegzubekommen (Fehler in Game.cpp):
error: 'CommandStatus' was not declared in this scope
error: expected ';' before 'status'

Könnte es an den Include guards liegen? Je nach Reihenfolge der Includeguards in der .cpp wird einmal die Klasse CommandStatus oder CommandQuit von der Sichtbarkeit nicht erkannt :( CommandStatus und CommandQuit sind dabei von Command abgeleitet. CommandStatus sieht hier genau so aus wie CommandQuit. Ich freue mich über jeden Ratschlag :)


Code:
//----------------Game.h-------------
#ifndef GAME_H_INCLUDED
#define GAME_H_INCLUDED

#include "Command.h"
#include "CommandStatus.h"
#include "CommandQuit.h"

class Game
{
  private:

  public:
    Game();

    int run();
};
#endif //GAME_H_INCLUDED


//----------------Game.cpp-------------
#include "Command.h"
#include "CommandQuit.h"
#include "CommandStatus.h"
#include "Game.h"

#include <iostream>
#include <vector>

int Game::run()
{
    std::string input;
    std::vector<Command*> commands;

    // Create our commanmd list
    CommandStatus status = CommandStatus("status");
    CommandQuit quit = CommandQuit("quit");

    //commands.push_back(&quit);
   commands.push_back(&status);

  return -2;
}

//----------------Command.h-------------
class Command
{
  public:

    Command(std::string name);
    
    virtual int execute() = 0;

  private:
    std::string command_name_;
};

//----------------CommandStatus.h-------------
#ifndef COMMAND_VIEW_H_INCLUDED
#define COMMAND_VIEW_H_INCLUDED

#include "Command.h"
#include <iostream>
#include <string>
#include <vector>

class CommandStatus : public Command
{
  private:

  public:
    CommandStatus(std::string name);
    virtual int execute();
};
#endif //

//----------------CommandStatus.cpp-------------
#include "CommandStatus.h"
#include <iostream>
#include <string>
#include <vector>

CommandStatus::CommandStatus(std::string name)
: Command(name)
{
}

int CommandStatus::execute()
{
  std::cout << "executed" << std::endl;
  return 1;
}
 
Du hast uns den Code von CommandQuit verschwiegen, aber ich gehe einmal davon aus, dass du den gleichen Include-Guard genutzt hast, also COMMAND_VIEW_H_INCLUDED sowohl in CommandQuit.h und CommandStatus.h herhalten muss.
Wenn dem so ist, dann ist dein Problem schnell geklärt ;)

Hinweis: Du kannst dir die doppelten #includes sparen. z.B. Hast du die gleichen includes in Game.h und auch in Game.cpp. Da du jedoch Game.h in Game.cpp inkludierst reichen die Angaben in Game.h
 
Zurück