Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: xRodak en 14 Enero 2014, 19:39 pm



Título: Problema con orden de declaración de 2 clases
Publicado por: xRodak en 14 Enero 2014, 19:39 pm
Estoy seguro que el error debe ser muy evidente, así que pido disculpas de antemano por preguntar algo tan básico.

Lo que sucede, es que tengo una clase y una estrucura:

Código:
class MyClass
{
public:
void onCommand(const [b]Command[/b]& command, sf::Time dt);
};

struct Command
{
std::function<void([b]SceneNode[/b]&, sf::Time)> action;
unsigned int category;
};

Y si las escribo de esta forma en mi codigo, me da el siguiente error:

Código:
|157|error: 'Command' does not name a type|

Supuse que haciendo el orden contrario obtendría un error similar, así que declaré la estructura al inicio del código para señalarle al código que mi estructura si existía en algún lado. Entonces lo escribí de esta forma:

Código:
struct Command;

class MyClase
{
public:
void onCommand(const [b]Command[/b]& command, sf::Time dt);
};

struct Command
{
std::function<void([b]SceneNode[/b]&, sf::Time)> action;
unsigned int category;
};

Por lo que conseguí repararlo.

Pero ahora, la función onCommand me da error al llamar a command.category:

Código:
void SceneNode::onCommand(const Command& command, sf::Time dt)
{
    [b]command.category;[/b]
}

Acaso tambien debo declarar esta variable de mi estructura al comienzo del código? Si tuviera muchas variables deberái declararlas todas? Hay alguna otra solución.

Muchas gracias de antemano, espero que se haya entendido el problema.

Saludos.


Título: Re: Problema con orden de declaración de 2 clases
Publicado por: Beakman en 16 Enero 2014, 07:07 am
Las declaraciones siguen un orden secuencial. Si querés utilizar una estructura primero tenés que declararla. Hay varias formas de resolver eso. Todo depende del resto del código que tengas. La forma más sencilla sería así:

Código
  1. struct Command {
  2. std::function<void( SceneNode&, sf::Time )> action;
  3. unsigned int category;
  4. };
  5.  
  6. class MyClass {
  7. public:
  8. void onCommand( const Command& command, sf::Time dt );
  9. };

Citar
Acaso tambien debo declarar esta variable de mi estructura al comienzo del código? Si tuviera muchas variables deberái declararlas todas? Hay alguna otra solución.
Todo lo que utilices siempre debe estar declarado antes. Si tenés muchas variables y tu intención es tener un código limpio,  podrías utilizar otros archivos.

Código
  1. #include "command_struct.hpp"
  2. class MyClass {
  3. public:
  4. void onCommand( const Command& command, sf::Time dt );
  5. };

Un saludo!