Mr Burns Skrevet 9. januar 2007 Del Skrevet 9. januar 2007 (endret) Heisann, det er en stund siden sist jeg kodet c++, og har litt problemer med linkingen. Kan noen hjelpe meg litt her? Feilmelding: Linking... Peer2PeerDlg.obj : error LNK2019: unresolved external symbol "public: void __thiscall Packet::setData(class CBuffer)" (?setData@Packet@@QAEXVCBuffer@@@Z) referenced in function "public: void __thiscall CPeer2PeerDlg::OnBnClickedButton1(void)" (?OnBnClickedButton1@CPeer2PeerDlg@@QAEXXZ) Peer2PeerDlg.obj : error LNK2019: unresolved external symbol "public: void __thiscall Packet::setHeader(class Header)" (?setHeader@Packet@@QAEXVHeader@@@Z) referenced in function "public: void __thiscall CPeer2PeerDlg::OnBnClickedButton1(void)" (?OnBnClickedButton1@CPeer2PeerDlg@@QAEXXZ) Utdrag av kode som gir feil: head.setType(1); head.setfileName(myFile.GetFileName()); head.setLength(nFileLength); pakken.setHeader(head); while ( nReadBytes < nFileLength) { nReadBytes += myFile.Read(&szBuffer, 1); } pakken.setData(szBuffer); Packet.hpp: #pragma once //Packet.hpp #include "Header.h" #include "Buffer.h" class Packet { public: Packet(void); Header getHeader(); CBuffer getData(); void setHeader(Header); void setData(CBuffer); public: virtual ~Packet(void); private: Header head; CBuffer data; }; Packet.cpp: #include "stdafx.h" #include "Packet.h" #include "Header.h" #include "Buffer.h" Header head; CBuffer data; Packet::Packet(void) { head.setType(0); head.setLength(0); head.setfileName(""); data.ClearBuffer(); } Packet::~Packet(void) { } Header getHeader(){ return head; } CBuffer getData(){ return data; } void setHeader (Header h ){ head = h; } void setData(CBuffer buf){ data = buf; } Og header.hpp: #pragma once class Header { public: Header(void); char getType(); int getLength(); CString getfileName(); void setType(char); void setLength(int); void setfileName(CString); public: virtual ~Header(void); private: char type; int length; CString fileName; }; header.cpp: #include "stdafx.h" #include "Header.h" #include "Buffer.h" Header::Header(void) { type = 0; length = 0; fileName.SetString(""); } Header::~Header(void) { } char Header::getType(){ return type; } int Header::getLength(){ return length; } CString Header::getfileName(){ return fileName; } void Header::setType(char t){ type = t; } void Header::setLength(int len){ length = len; } void Header::setfileName(CString fn){ fileName.SetString(fn); } Endret 9. januar 2007 av Mr Burns Lenke til kommentar
einaros Skrevet 9. januar 2007 Del Skrevet 9. januar 2007 Linking... Peer2PeerDlg.obj : error LNK2019: unresolved external symbol "public: void __thiscall Packet::setData(class CBuffer)" (?setData@Packet@@QAEXVCBuffer@@@Z) referenced in function "public: void __thiscall CPeer2PeerDlg::OnBnClickedButton1(void)" (?OnBnClickedButton1@CPeer2PeerDlg@@QAEXXZ) Peer2PeerDlg.obj : error LNK2019: unresolved external symbol "public: void __thiscall Packet::setHeader(class Header)" (?setHeader@Packet@@QAEXVHeader@@@Z) referenced in function "public: void __thiscall CPeer2PeerDlg::OnBnClickedButton1(void)" (?OnBnClickedButton1@CPeer2PeerDlg@@QAEXXZ) Dette betyr at linkeren (som kjøres etter kompilatoren, og enkelt sagt har ansvaret for at nødvendig kode ender opp i den ferdigproduserte filen) ikke er i stand til å finne funksjonene Packet::setData og Packet::setHeader. Hvis du kikker på Packet.cpp, så finner du forklaringen: Packet.cpp: #include "stdafx.h" #include "Packet.h" #include "Header.h" #include "Buffer.h" Header head; CBuffer data; Packet::Packet(void) { head.setType(0); head.setLength(0); head.setfileName(""); data.ClearBuffer(); } Packet::~Packet(void) { } Header getHeader(){ return head; } CBuffer getData(){ return data; } void setHeader (Header h ){ head = h; } void setData(CBuffer buf){ data = buf; } [/code] 7678908[/snapback] Her mangler du klassenavnet i funksjonsdefinisjonene. void setHeader skal være void Packet::setHeader, og setData, getDate, getHeader må navngis på samme måte. Poenget er rett og slett at du her skal definerer funksjoner som er deklarert i klasser, mens du definerer globale funksjoner i stedet. Når linkeren kikker etter definisjonen for f.eks. setHeader, som er referert et annet sted i koden din, finner den ingenting. Det eneste den derfor kan gjøre, er å spytte ut en feilmelding Lenke til kommentar
Mr Burns Skrevet 9. januar 2007 Forfatter Del Skrevet 9. januar 2007 Her mangler du klassenavnet i funksjonsdefinisjonene. void setHeader skal være void Packet::setHeader, og setData, getDate, getHeader må navngis på samme måte. Poenget er rett og slett at du her skal definerer funksjoner som er deklarert i klasser, mens du definerer globale funksjoner i stedet. Når linkeren kikker etter definisjonen for f.eks. setHeader, som er referert et annet sted i koden din, finner den ingenting. Det eneste den derfor kan gjøre, er å spytte ut en feilmelding 7678998[/snapback] Doh! Takk skal du ha! Burde sett den selv... 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å