Siempre que puedo compilar algo que # incluye una clase definida por el usuario, consigo estos errores de compilación que siempre se parecen: main.cpp: undefined reference to Complex::Complex(double, double)
errores de inclusión de archivos (C++): referencia indefinida a ______
he reducido el problema a una conjunto de tres archivos extremadamente simples: main.cpp y, por ejemplo, Complex.hy Complex.cpp. Todavía obtengo errores de referencia indefinidos. Estoy desarrollando en Code :: Blocks en Windows pero obtengo lo mismo usando g ++ en Ubuntu. ¿Por qué pasó esto? Intenté construir Complex.cpp antes de main.cpp en Code :: Blocks, y probé g++ main.cpp Complex.cpp
tanto como lo intenté con g++ main.cpp
. Mismos errores todo el tiempo.
/*======== main.cpp ========*/
#include "Complex.h"
int main()
{
Complex A(1.0, 1.0);
return 0;
}
/*======== Complex.h ========*/
#ifndef _COMPLEX_H
#define _COMPLEX_H
class Complex
{
public:
double x, y;
Complex(double real, double imag);
};
#endif
/*======== Complex.cpp ========*/
#include "Complex.h"
Complex::Complex(double real, double imag)
{
x = real;
y = imag;
}
ed: ahora recibo diferentes errores, así que debo estar haciendo algo completamente incorrecto. Usando el mismo código que el anterior, obtengo:
main.cpp: in function 'int main()':
main.cpp:5:5: error: 'Complex' was not declared in this scope
main.cpp:5:13: error: expected ';' before 'A'
Esto es extraño. Todo funcionó antes cuando tenía la clase en un archivo .cpp, pero eso es una "mala práctica", así que moví mis definiciones de clase a archivos .h y mantuve la implementación en archivos .cpp, y ahora nada funciona.
También asegúrese de agregar "-I" a su línea de compilación. Quizás incluso "-I.", Si sus archivos .h están en el mismo directorio. – paulsm4
Funciona para mí. Acabo de copiar tu 'main.cpp',' Complex.h', y 'Complex.cpp', y ejecuté' g ++ main.cpp Complex.cpp'. Creó 'a.out' muy bien. – ruakh
Funciona para mí también. @ paulsm4: ¿no debería '.' estar en la ruta de inclusión predeterminada? (tenga en cuenta que está haciendo '#include" ... "', not '#include <...>') –