¿Por qué falla mi definición de clase C++?
Frecuentes
Visto 338 veces
2
main.cpp
#include <iostream>
#include "Burrito.h"
using namespace std;
int main(){
Burrito b;
return 0;
}
Burrito.h
#ifndef BURRITO_H
#define BURRITO_H
class Burrito{
public:
Burrito();
};
#endif
Burrito.cpp
#include "Burrito.h"
#include <iostream>
Burrito::Burrito(){
}
Compilar y vincular:
lzsb$ g++ main.cpp -o main
Undefined symbols for architecture x86_64:
"Burrito::Burrito()", referenced from:
_main in ccVpCr0z.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
lzsb$
Plataforma:
Mac OS 10.6.8
G++ : i686-apple-darwin10 --with-gxx-include-dir=/usr/include/c++/4.2.1
2 Respuestas
10
Necesitas compilar el Burrito.cpp
archivo también. El compilador crea archivos de objetos a partir de cada archivo .cpp y los vincula después. Aquí es donde falla su llamada, porque el enlazador no puede encontrar el referenciado Burrito
clase en cualquiera de sus archivos de objetos. Para arreglar su llamada al compilador simplemente agregue Burrito.cpp
g++ main.cpp Burrito.cpp -o main
respondido 13 mar '16, 13:03
Thx, pero si tengo muchos archivos cpp, sería estúpido agregarlos todos. Entonces, ¿cómo manejarlo normalmente cuando hay muchos archivos fuente? - WoooHaaaa
@MrROY Depende de cómo prefiera trabajar. Si está utilizando un IDE como XCode (ya que está en OSX) o Eclipse o Kdevelop, estos IDE le brindan la posibilidad de administrar las llamadas del compilador. Si prefiere trabajar con un editor simple, le recomendaría que use un Makefile (Make ya está instalado en OSX si tiene las herramientas de compilación). Vea aquí un Makefile de ejemplo, que compila todas las fuentes .cpp en un directorio: stackoverflow.com/a/9789115/991425 . Luego, todo lo que tiene que hacer es llamar a make en la línea de comandos en el directorio con las fuentes y el Makefile. - Haatschii
4
Su línea de compilación debe ser:
g++ Burrito.cpp principal.cpp -o principal
Respondido el 12 de junio de 12 a las 09:06
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas c++ gcc g++ or haz tu propia pregunta.
posible duplicado de referencia indefinida a `Class :: Class () ' - Bo Persson