Gå til innhold

Unresolved external symbol, trenger litt hjelp


Anbefalte innlegg

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 av Mr Burns
Lenke til kommentar
Videoannonse
Annonse
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

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... :blush:

Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...