Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: patilanz en 7 Septiembre 2016, 23:27 pm



Título: Mientro static dentro de clase static, simbolo externo sin resolver
Publicado por: patilanz en 7 Septiembre 2016, 23:27 pm
Hola,
en este código
Código
  1. class mainMenu{
  2. public:
  3. static enum menuResult { Nothing, Play, Instruction, About, Exit };
  4. static class menuItem{
  5. public:
  6. menuItem(char * name = "");
  7. menuItem(char * name, mainMenu::menuResult action);
  8. char * name;
  9. mainMenu::menuResult action;
  10. sf::Rect<int> rect;
  11. int fontSize = 24;
  12. void draw(sf::RenderWindow & window);
  13.  
  14. static mainMenu * mainMenuPointer; // problem
  15. private:
  16. bool created = false;
  17. // draw items
  18. sf::Text text;
  19. sf::RectangleShape outline;
  20. };
  21.  
  22. std::vector<menuItem> items;
  23.  
  24. sf::Font font;
  25. void drawItems(sf::RenderWindow & window);
  26. //menuResult handleClick();
  27. };
  28.  
  29.  
  30.  

La variable mainMenuPointer o cualquier variable estática dentro de la clase estática menuItem muestra el error de símbolo externo sin resolver 2001 en visual studio 2013
Alguien sabe porqué?

Un saludo


Título: Re: Mientro static dentro de clase static, simbolo externo sin resolver
Publicado por: class_OpenGL en 8 Septiembre 2016, 08:35 am
Los problemas se resume en que en C++, el uso de la palabra static no es el mismo que en Java. En C++ no puedes tener clases estáticas usando static al principio de la clase. La palabra static en C++ solo se puede poner detrás de la declaración y definición de variables o métodos (hablando dentro de POO). Por ello, tampoco puedes hacer static enum menuResult [...]; Eso no está permitido


Título: Re: Mientro static dentro de clase static, simbolo externo sin resolver
Publicado por: patilanz en 8 Septiembre 2016, 14:09 pm
Los problemas se resume en que en C++, el uso de la palabra static no es el mismo que en Java. En C++ no puedes tener clases estáticas usando static al principio de la clase. La palabra static en C++ solo se puede poner detrás de la declaración y definición de variables o métodos (hablando dentro de POO). Por ello, tampoco puedes hacer static enum menuResult [...]; Eso no está permitido

Lo raro es que
Código
  1. static enum menuResult { Nothing, Play, Instruction, About, Exit };
si que funciona


En realidad lo que intento hacer es que una vez creada la clase A, todos los objetos con tipo clase B creados tengan un puntero apuntando a clase A sin necesidad de asignar la dirección en cada objeto nuevo creado


Título: Re: Mientro static dentro de clase static, simbolo externo sin resolver
Publicado por: ivancea96 en 8 Septiembre 2016, 16:15 pm
Bueno, static no es la palabra que buscas, es todo. static de hecho, hace algo totalmente opuesto a lo que buscas. Los miembros declarados como static no pertenecen a cada objeto, sino que pertenecen a la clase en sí.

En cualquier caso, una opción es poner una función en la clase menuItem que agregue el elemento al vector y que le asigne su dirección.
A menuItem le quitarías la palabra static, y lo pondrías fuera o dentro de la clase mainMenu, como quieras.
Luego, mainMenuPointer no puede ser static. Si es static, al cambiarlo, "cambiará en todos los objetos menuItem". Eso significa que funcionaría si solo quisieras tener 1 único mainMenu.