Sin embargo, otro problema enlazador
-
18-09-2019 - |
Pregunta
Estoy teniendo un problema de la vinculación con un programa básico de C ++. No, no estoy incluyendo archivos .cpp
!
Esto es lo que está pasando.
main.cpp:
#include "header.h"
#include <iostream>
int main() {
std::cout << "Hello!";
}
header.h:
#ifndef _HEADER_H
#define _HEADER_H
class Something {
public:
printContents();
};
#endif
something.cpp:
#include "header.h"
#include <iostream>
Something::printContents() {
cout << "This class's Contents!!";
}
Lo que pasa es que me da un error del compilador va: múltiples definiciones de alguna función estándar de C, tales como strtod
:
g ++ -o ... main.o
construir / .... main.o: En función de `Strtod ':../ MinGW / bin /../ lib / gcc / mingw32 / 3.4.5 /../../../../ incluir / stdlib.h: 318: múltiple definición de `strtod '
construcción / .. something.o: ... :( something.cpp texto + 0x0).: primero se define aquí collect2: LD devuelto 1 estado de salida
Si me libro de #include <iostream>
en una de las dos ocasiones y deshacerse de los cout
s, se compilará. ¿Que esta pasando? Estoy usando g ++ y NetBeans para compilar.
He intentado en la línea de comandos:
g++ *.h *.cpp -o program
y lo mismo sucedió.
Solución 6
El problema estaba en un multi-instalación de MinGW. Tenía uno ya instalado, y cuando llegué a Qt en mi equipo, que había instalado su propio MinGW. Fastidio, me portado el código a los servidores de mi universidad y encontré bien.
Bummer !!
Gracias a todos por la ayuda, que sin duda seguir sus directrices en el futuro.
Los nombres de encabezado - No hay guiones bajos tipo de retorno correcta código real en los foros!
Leo Bruzzaniti
Otros consejos
Tenga en cuenta que _HEADER_H
es un nombre ilegal en C ++ código de usuario - nombres que comienzan con el carácter de subrayado y una letra mayúscula se reservan para la implementación en C ++. Esto normalmente no causa problemas notables, pero cuando se utiliza lo que puede ser un nombre común en la aplicación como cabecera en este contexto, que bien podría hacerlo.
Modificar
Something::printContents()
{
std::cout << "This class's Contents!!";
}
NOTA: Especificar el tipo de retorno
.Uno de sus problemas es aquí:
He intentado en la línea de comandos: g ++ * .h * Programa -o .cpp
No pase sus archivos de cabecera ... intentar algo como esto:
g ++ * programa -o .cpp
No podía reproducir el problema exacto. Me sale esto para compilar y enlazar bien con las siguientes pocas notas:
- Añadir un tipo de retorno a la
void
printContents
-función (Por lo que dicevoid printContents();
en la cabecera y en la implementaciónvoid Something::printContents() {
-archivo) - Uso
std::cout
en lugar de sólocout
.cout
no se define en el ámbito de aplicación se utiliza - Asegúrese de header.h termina con una línea en blanco
- Uso
HEADER_H
en lugar de_HEADER_H
(como Neil Butterworth dice)
Yo uso el g++ main.cpp something.cpp
línea de comandos para compilar.
Veo un par de problemas. Usted shuold definir el valor de retorno de la función
printContents()
y debe escribir
std::cout
Si usted no escribe
using namespace std;