Pergunta

Eu estou tendo um problema de ligação com um programa C ++ básico. Não, eu não estou incluindo arquivos .cpp!

Isto é o que está acontecendo.

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!!";
}

O que está acontecendo é que eu recebo um erro do compilador vai: várias definições de alguma função C padrão, tais como strtod:

g ++ -o ... main.o
build / .... main.o: Função Em `Strtod ':

../ MinGW / bin /../ lib / gcc / mingw32 / 3.4.5 /../../../../ incluem / stdlib.h: 318: múltipla definição de `strtod '

build / .. something.o:. ... something.cpp :( texto + 0x0): primeiro definido aqui collect2: ld voltou 1 status de saída

Se eu me livrar de #include <iostream> em uma das duas ocasiões e se livrar dos couts, ele irá compilar. O que está acontecendo? Estou usando g ++ e NetBeans para compilar.

Eu tentei na linha de comando:

g++ *.h *.cpp -o program

e aconteceu a mesma coisa.

Foi útil?

Solução 6

O problema estava em um multi-instalação de MinGW. Eu tinha um já instalado, e quando cheguei Qt no meu computador, ele havia instalado seu próprio MinGW. Bummer, eu portado o código para os servidores da minha universidade e funcionou OK.

Bummer !!

Obrigado a todos pela ajuda, com certeza vou seguir suas diretrizes no futuro.

Nomes de cabeçalho - sem sublinhados Tipo de retorno correto código real nos fóruns!

Leo Bruzzaniti

Outras dicas

Por favor note que _HEADER_H é um nome ilegal no código do usuário C ++ - nomes que começam com o sublinhado e uma letra maiúscula são reservados para a implementação C ++. Isso normalmente não causa problemas visíveis, mas quando você usar o que pode ser um nome comum em execução como HEADER neste contexto, bem poderia.

Modificar,

Something::printContents() 
{    
  std::cout << "This class's Contents!!";
}

NOTA:. Especifique o tipo de dados de retorno

Um dos seus problemas é aqui:

Eu tentei na linha de comando: g ++ * .h * Programa CPP -o

Não passe seus arquivos de cabeçalho ... Tente algo parecido com isto:

g ++ * programa CPP -o

Eu não poderia reproduzir o seu problema exato. Recebo esta para compilar e ligar muito bem com os seguintes algumas notas:

  • Adicionar um tipo void retorno à função printContents (Então ele diz void printContents(); no cabeçalho e void Something::printContents() { no arquivo de implementação)
  • Use std::cout ao invés de apenas cout. cout não é definido no escopo é usado
  • Certifique-se de extremidades header.h com uma linha em branco
  • Use HEADER_H em vez de _HEADER_H (como Neil Butterworth diz)

Eu uso o g++ main.cpp something.cpp linha de comando para compilar.

Eu vejo um par de problemas. Você shuold definir o valor retorno da função

printContents()

e você deve escrever

std::cout

Se você não escrever

using namespace std;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top