Je rencontre un problème de liaison avec un programme C++ de base. Non, je n'inclus pas .cpp
fichiers!Encore un autre problème d'éditeur de liens
C'est ce qui se passe.
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!!";
}
Ce qui se passe est que je reçois une erreur de compilation va: plusieurs définitions d'une fonction C standard, telle que strtod
:
g ++ -o ... main.o
build/.... main.o: En fonction `strtod ':../MinGW/bin/../lib/gcc/ mingw32/3.4.5 /../../../../ include/stdlib.h: 318: définition multiple de `strtod '
build/.. something.o: ... quelque chose. cpp :(texte + 0x0):. d'abord défini ici collect2: ld retourné 1 état de sortie
Si Je me débarrasse de #include <iostream>
dans l'une des deux occasions et se débarrasser des cout
s, il compilera. Que se passe-t-il? J'utilise g ++ et NetBeans pour compiler.
J'ai essayé dans la ligne de commande:
g++ *.h *.cpp -o program
et la même chose est arrivé.
Je suis surpris que vous arriviez même à l'éditeur de liens avec ce code. –
Pouvez-vous spécifier plus de détails dans la façon dont vous compilez et liez? –
J'ai fini par travailler dessus. La fixation du code et le #ifndef ont tout corrigé. Je ne suis toujours pas complètement sûr de la façon dont l'erreur s'est produite. J'ai fait mon propre makefile et les erreurs semblent avoir disparu. –