Carl Sagan Skrevet 30. juni 2009 Del Skrevet 30. juni 2009 (endret) Heisann. Får feilene error LNK2005: "int __cdecl ReadNumber(void)" (?ReadNumber@@YAHXZ) already defined in main.obj error LNK2005: "void __cdecl WriteAnswer(void)" (?WriteAnswer@@YAXXZ) already defined in main.obj fatal error LNK1169: one or more multiply defined symbols found main cpp: #include "stdafx.h" #include "io.cpp" #include <iostream> int main() { using namespace std; WriteAnswer(); return 0; } io.cpp: #include "stdafx.h" #include <iostream> int ReadNumber() { using namespace std; cout << "Skriv et tall "; int x; cin >> x; cout << "Du skrev " << x << endl; cout << "Skriv et nytt tall "; int y; cin >> y; cout << "Du skrev " << y << endl; int z; z = y + x; return z; } void WriteAnswer() { using namespace std; cout << "Svaret er " << ReadNumber() << endl; } Hva er galt? Bruker Visual C++ Studio EDIT: Ser nå at tråden kan flyttes inn i nybegynnerhjelptråden. Sorry! EDIT2: Jeg begynte å lese på Accelerated C++ boken, men fant ut at http://www.learncpp.com var enklere å bruke så jeg har byttet til den siden. Er dette et dumt valg? Har bare kommet noen kapitler, så det er fortsatt ikke for seint å snu. Endret 30. juni 2009 av Todda7 Lenke til kommentar
Giddion Skrevet 30. juni 2009 Del Skrevet 30. juni 2009 ojoj det tokk litt tid før jeg fant det ut. Det som skjer er at kompilatoren kompilerer io.cpp for så kompilere main.cpp (som inneholder hele io.cpp m.m.) og når den så skal linke dette sammen så finner den flere like funksjoner og da stopper linkeren. Løsningen er da: 1. Inkludere headere ikke source filer, 2. Fjern io.cpp fra visual studio prosjektet. 3. Legge inn prototyper på funksjonene fra io.cpp i main.cpp Jeg ville gått for nr 1 ettersom det er den metoden jeg (og mange andre) syntes uten tvil er best. eksempel på io.h: void WriteAnswer(); int ReadNumber(); Lykke til Lenke til kommentar
Carl Sagan Skrevet 30. juni 2009 Forfatter Del Skrevet 30. juni 2009 (endret) Det du mener er altså å inkludere #include "io.h" i main istedenfor io.cpp, for å så lage en headfile for io? Takker for hjelp EDIT: Det fungerte, tusen takk! Men hvorfor er det slik? Endret 30. juni 2009 av Todda7 Lenke til kommentar
Giddion Skrevet 30. juni 2009 Del Skrevet 30. juni 2009 (endret) EDIT: Det fungerte, tusen takk! Men hvorfor er det slik? Problemet er at du gjennom å #include io.cpp blir det definert innholdet i f. eks. WriteAnswer ( alt inni {} ) og det må ikke være flere steder i koden, men det å definere en prototype av funksjonen ""int ReadNumber();" er helt greit og det kan ligger så mange steder du bare vil i koden. Det å legge prototyper (pluss litt annet) i headere er ofte en god måte å kode på, men du kan godt legge innholdet i headeren inn i main.cpp (som er det samme #include gjør) og få samme resultat. Håper det hjalp Endret 30. juni 2009 av Giddion Lenke til kommentar
Carl Sagan Skrevet 30. juni 2009 Forfatter Del Skrevet 30. juni 2009 (endret) Problemet er at du gjennom å #include io.cpp blir det definert innholdet i f. eks. WriteAnswer ( alt inni {} ) og det må ikke være flere steder i koden, men det å definere en prototype av funksjonen ""int ReadNumber();" er helt greit og det kan ligger så mange steder du bare vil i koden. Det jeg ikke skjønner er hvor f.eks WriteAnser (og alt inni funksjonen) er definert to ganger, da jeg bare har brukt det en gang i io.cpp? EDIT: Kan jeg bruke int ReadNumber () og void WriteAnswer() i main, uten å måtte bruke header eller å inkludere (#include) noe på topp? EDIT2: Det fungerte ja! Men hva er mest ryddig / den beste måten å gjøre det på, prototype eller header? Endret 30. juni 2009 av Todda7 Lenke til kommentar
Giddion Skrevet 1. juli 2009 Del Skrevet 1. juli 2009 Problemet er at du gjennom å #include io.cpp blir det definert innholdet i f. eks. WriteAnswer ( alt inni {} ) og det må ikke være flere steder i koden, men det å definere en prototype av funksjonen ""int ReadNumber();" er helt greit og det kan ligger så mange steder du bare vil i koden. Det jeg ikke skjønner er hvor f.eks WriteAnser (og alt inni funksjonen) er definert to ganger, da jeg bare har brukt det en gang i io.cpp? Det er definert i io.cpp, men siden du bruker #include "io.cpp" blir hele innholdet fra io.cpp kopiert inn i mail.cpp og da er funksjonen definert i io.cpp og main.cpp EDIT: Kan jeg bruke int ReadNumber () og void WriteAnswer() i main, uten å måtte bruke header eller å inkludere (#include) noe på topp?EDIT2: Det fungerte ja! Men hva er mest ryddig / den beste måten å gjøre det på, prototype eller header? Hva som er mest ryddig er den beste måten og det varierer fra person til person, men det jeg har oppfattet som det mest normale/beste er å legge prototyper av funksjoner/klasser i headeren og så funksjonene i source filen (med samme navn) Det at prototypene bare ligger et sted (i headeren) gjør det også enklere å vedlikeholde. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå