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 couts, 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ó.

¿Fue útil?

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 dice void printContents(); en la cabecera y en la implementación void Something::printContents() {-archivo)
  • Uso std::cout en lugar de sólo cout. 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;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top