elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Compilador cree que el objeto que pusheo en vector es distinto tipo.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Compilador cree que el objeto que pusheo en vector es distinto tipo.  (Leído 1,736 veces)
16BITBoy

Desconectado Desconectado

Mensajes: 137


En mi pompa..


Ver Perfil WWW
Compilador cree que el objeto que pusheo en vector es distinto tipo.
« en: 27 Mayo 2012, 00:33 am »

Es un error bastante extraño, verán tengo 2 clases, una de ellas con un string como miembro y la otra tiene un vector de objetos de la otra clase y un metodo que solo crea y añade un objeto a ese vector.

Cuando tenía interfaz e implementación juntos en el mismo fichero, el compilador aceptaba el objeto sin problemas, pero después de separarlos ya no lo reconoce, aun pudiendo acceder sin problemas a la declaración de la clase del objeto.

Código
  1. #ifndef _MYHEADER_HPP_
  2. #define _MYHEADER_HPP_
  3. class A{
  4. public:
  5.    std::string someString;
  6. };
  7.  
  8. class B{
  9. public:
  10.    std::vector<A> aList;
  11. public:
  12.    void addA();
  13. };
  14.  
  15. #endif /* _MYHEADER_HPP_ */
  16.  
  17. //implementation file
  18.  
  19. #include <string>
  20. #include <vector>
  21. #include "myheader.hpp"
  22.  
  23. void B::addA(){
  24.    A a;
  25.    a.someString = "Hola";
  26.    // Here compiler says : Invalid arguments 'Candidates are: void push_back(const A &)' line 18 Semantic Error
  27.    aList.push_back(a);
  28. }
  29.  
  30.  

He intentado declarando un puntero a vector de A en vez de hacerlo de esta forma y resulta igual. También, si en B::addA() haces:
Código
  1. std::cout << a.someString << std::endl;
Accede sin problemas al objeto, con lo cual creo que puede acceder perfectamente a la declaración de la clase en ese momento.

¿Que estoy haciendo mal?

Gracias de antemano.


En línea

Blog personal: http://www.16bitboy.com/blog

- Que horrible pesadilla, unos y ceros por todas partes... hasta me parecio ver un ¡dos!
- Bender, solo fue una pesadilla, no existe eso que llamas "dos".
RyogiShiki


Desconectado Desconectado

Mensajes: 745


げんしけん - Hikkikomori FTW!!!


Ver Perfil WWW
Re: Compilador cree que el objeto que pusheo en vector es distinto tipo.
« Respuesta #1 en: 27 Mayo 2012, 01:56 am »

Como hiciste con a debes instanciar tambien un objeto de clase B aList pertenece a la clase B:

Código
  1. A a;
  2. B b;
  3. a.someString = "Hola";
  4. b.aList.push_back(a);
  5.  

Saludos


En línea

16BITBoy

Desconectado Desconectado

Mensajes: 137


En mi pompa..


Ver Perfil WWW
Re: Compilador cree que el objeto que pusheo en vector es distinto tipo.
« Respuesta #2 en: 27 Mayo 2012, 19:03 pm »

Después de mas de 3 horas depurando el código y buscando la raíz del problema, he llegado finalmente a ella. Eclipse CDT guarda una caché del código al hacer la precomprobación sintáctica y semántica antes de pasarle el código al compilador. Pues bien esta caché estaba corrupta, una vez eliminada, todo volvió a funcionar con normalidad.
Como hiciste con a debes instanciar tambien un objeto de clase B aList pertenece a la clase B:

Código
  1. A a;
  2. B b;
  3. a.someString = "Hola";
  4. b.aList.push_back(a);
  5.  

Saludos
Esto que mencionas RyogiShiki seria solo cierto si ese código que has leido estuviera fuera de la clase B. Puesto que es un código de implementación de la clase B no tiene sentido eso que dices.
Gracias de todos modos, un saludo.
En línea

Blog personal: http://www.16bitboy.com/blog

- Que horrible pesadilla, unos y ceros por todas partes... hasta me parecio ver un ¡dos!
- Bender, solo fue una pesadilla, no existe eso que llamas "dos".
RyogiShiki


Desconectado Desconectado

Mensajes: 745


げんしけん - Hikkikomori FTW!!!


Ver Perfil WWW
Re: Compilador cree que el objeto que pusheo en vector es distinto tipo.
« Respuesta #3 en: 27 Mayo 2012, 19:34 pm »

Tienes toda la razón, mea culpa. No lei bien el código.

Saludos
En línea

Foxy Rider


Desconectado Desconectado

Mensajes: 2.407


Deprecated


Ver Perfil WWW
Re: Compilador cree que el objeto que pusheo en vector es distinto tipo.
« Respuesta #4 en: 27 Mayo 2012, 21:37 pm »

Por cierto, tanto el include de vector e string, corresponden al encabezado de la clase A, por que es una dependencia de A, que se requiere en ese encabezado. también tenés dos "publics" cuando uno es suficiente para todo lo que está abajo.
La regla general que uso es que si en una declaración se requiere el tipo de dato de un header X, se incluye junto a la declaración ... si sólo la implementación, entonces al .cpp

Pensá que la declaración de una clase en un .h, y su definición en un .cpp, son dos partes de una unidad básica de compilación, por ponértelo en esos términos ...

Saludos.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Como hacer que se cree un objeto a traves de otro objeto (¿se puede?) « 1 2 »
.NET (C#, VB.NET, ASP)
Sin Nick xD 10 6,264 Último mensaje 22 Marzo 2008, 06:18 am
por Sin Nick xD
Variables tipo objeto « 1 2 »
Programación Visual Basic
Javilondo 14 3,074 Último mensaje 22 Septiembre 2010, 18:46 pm
por ignorantev1.1
Un objeto que sea un vector:
Programación C/C++
Error 404: 2 710 Último mensaje 29 Noviembre 2014, 20:33 pm
por Error 404:
[ayuda]Llenar un vector apartir de 2 que cree
Java
erikskate1 1 1,370 Último mensaje 27 Julio 2015, 20:06 pm
por Usuario Invitado
¿Se pueden tener parámetros de distinto tipo en un método?
Programación General
Jprogramer 1 610 Último mensaje 26 Mayo 2020, 16:42 pm
por Serapis
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines