Zum Inhalt springen

[Cpp] [VS2010] Error LNK2019


Gateway_man

Empfohlene Beiträge

Hi leute,

ich habe bei einer Funktion ständig mehrmals den LNK2019 Fehler.

"Verweis auf nicht aufgelöstes externes Symbol".

Die enstprechende Funktion sieht wie folgt aus:


double FingerPrintMatchResult (BITMAPINFOHEADER header1, BITMAPINFOHEADER header2){

	double match = 0;

	DrmErrorCode_t nRetCode;

	FC3Template_t hTemplate1, hTemplate2;

	FC3Encode_t hEncoder;

	FC3Match_t hMatcher;

	double dScore;


	BITMAPINFOHEADER* pBitmap1 = &header1;

	BITMAPINFOHEADER* pBitmap2 = &header2;


	if (pBitmap1==NULL)

	{

	return 0;

	}


	if (pBitmap2==NULL)

	{

	return 0;

	}


	long nBitmapSize1 = ((pBitmap1->biWidth+3)&~3)*pBitmap1->biHeight+1024+sizeof(BITMAPINFOHEADER);

	long nBitmapSize2 = ((pBitmap2->biWidth+3)&~3)*pBitmap2->biHeight+1024+sizeof(BITMAPINFOHEADER);

	nRetCode = FC3Initialize(NULL);

	if (nRetCode!=FPC_SUCCESS)

	{

		char* error = FC3GetErrorDescriptionA(nRetCode);


		free(pBitmap1);

		free(pBitmap2);

		return 0;

	}


	nRetCode = FC3CreateTemplate(&hTemplate1);

	if (nRetCode!=FPC_SUCCESS)

	{

		char* error = FC3GetErrorDescriptionA(nRetCode);

		FC3Uninitialize(); 

		free(pBitmap1);

		free(pBitmap2);

		delete error;

		return 0;

	}


	nRetCode = FC3CreateTemplate(&hTemplate2);

	if (nRetCode!=FPC_SUCCESS)

	{

		char* error = FC3GetErrorDescriptionA(nRetCode);

		FC3DestroyHandle((FC3_t *)&hTemplate1);

		FC3Uninitialize();

		free(pBitmap1);

		free(pBitmap2);

		delete error;

		return 0;

	}


	nRetCode = FC3CreateEncoder(&hEncoder);

	if (nRetCode!=FPC_SUCCESS)

	{

		char* error = FC3GetErrorDescriptionA(nRetCode);

		FC3DestroyHandle((FC3_t *)&hTemplate1);

		FC3DestroyHandle((FC3_t *)&hTemplate2);

		FC3Uninitialize();

		free(pBitmap1);

		free(pBitmap2);

		delete error;

		return 0;

	}

	nRetCode=FC3SetPropertyA(hEncoder, FC3_PR_ENCODE_FORMAT, "ISO/IEC 19794-2:2005" );

	if (nRetCode!=FPC_SUCCESS)

		char* error = FC3GetErrorDescriptionA(nRetCode);



	nRetCode = FC3Encode(hEncoder, pBitmap1, nBitmapSize1, hTemplate1);

	if (nRetCode!=FPC_SUCCESS)

	{

		char* error = FC3GetErrorDescriptionA(nRetCode);

		FC3DestroyHandle((FC3_t *)&hTemplate1);

		FC3DestroyHandle((FC3_t *)&hTemplate2);

		FC3DestroyHandle((FC3_t *)&hEncoder);

		FC3Uninitialize();

		free(pBitmap1);

		free(pBitmap2);

		delete error;

		return 0;

	}


	double quality;

	nRetCode = FC3GetPropertyDoubleA(hTemplate1, FC3_PR_TEMPLATE_QUALITY, &quality); 

	if (nRetCode!=FPC_SUCCESS)

	{

		char* error = FC3GetErrorDescriptionA(nRetCode);

		FC3Uninitialize(); 

		free(pBitmap1);

		free(pBitmap2);

		delete error;

		return 0;

	}

	//if (quality != 0){

	//quality1 = quality;

	//}


	nRetCode = FC3Encode(hEncoder, pBitmap2, nBitmapSize2, hTemplate2);

	if (nRetCode!=FPC_SUCCESS)

	{

		char* error = FC3GetErrorDescriptionA(nRetCode);

		FC3DestroyHandle((FC3_t *)&hTemplate1);

		FC3DestroyHandle((FC3_t *)&hTemplate2);

		FC3DestroyHandle((FC3_t *)&hEncoder);

		FC3Uninitialize();

		free(pBitmap1);

		free(pBitmap2);

		delete error;

		return 0;

	}


	nRetCode = FC3GetPropertyDoubleA(hTemplate2, FC3_PR_TEMPLATE_QUALITY, &quality); 

	if (nRetCode!=FPC_SUCCESS)

	{

		char* error = FC3GetErrorDescriptionA(nRetCode);

		FC3Uninitialize(); 

		free(pBitmap1);

		free(pBitmap2);

		delete error;

		return 0;

	}

	//if (quality!=0){

	//quality2 = quality;

	//}



	size_t  nTemplateSize=0;


	nRetCode = FC3GetTemplateData(hTemplate1, NULL, &nTemplateSize);


	//if (nRetCode!=FPC_SUCCESS && nRetCode!=FPC_ERROR_TEMPLATE_SIZE)

		//printf("Error (%d) while getting first template data: %s\n", (int)nRetCode, FC3GetErrorDescriptionA(nRetCode));


	BYTE *TemplateData = new BYTE[nTemplateSize];

	memset(TemplateData, 0, sizeof(BYTE) * nTemplateSize);


	nRetCode = FC3GetTemplateData(hTemplate1, (BYTE *)TemplateData, (size_t*)&nTemplateSize);

	//if (nRetCode!=FPC_SUCCESS)

	//	printf("Error (%d) while getting first template data: %s\n", (int)nRetCode, FC3GetErrorDescriptionA(nRetCode));

	if (nRetCode == FPC_SUCCESS)

	{

		FILE *out = NULL;

		out=fopen("EkaTemplate.template", "wb");

		fwrite(TemplateData, nTemplateSize, 1, out);

		fclose(out);

	}

	delete [] TemplateData;

	nTemplateSize=0;


	nRetCode = FC3GetTemplateData(hTemplate2, NULL, &nTemplateSize);


	//if (nRetCode!=FPC_SUCCESS && nRetCode!=FPC_ERROR_TEMPLATE_SIZE)

	//	printf("Error (%d) while getting second template data: %s\n", (int)nRetCode, FC3GetErrorDescriptionA(nRetCode));


	TemplateData = new BYTE[nTemplateSize];

	memset(TemplateData, 0, sizeof(BYTE) * nTemplateSize);

	nRetCode = FC3GetTemplateData(hTemplate2, (BYTE *)TemplateData, (size_t*)&nTemplateSize);

	//if (nRetCode!=FPC_SUCCESS)

	//	printf("Error (%d) while getting second template data: %s\n", (int)nRetCode, FC3GetErrorDescriptionA(nRetCode));

	if (nRetCode == FPC_SUCCESS)

	{

		FILE *out = NULL;

		out=fopen("TokaTemplate.template", "wb");

		fwrite(TemplateData, nTemplateSize, 1, out);

		fclose(out);

	}

	delete [] TemplateData;




	nRetCode = FC3CreateMatcher(&hMatcher);

	if (nRetCode!=FPC_SUCCESS)

	{

		//printf("Error (%d) while creating matcher: %s\n", (int)nRetCode, FC3GetErrorDescriptionA(nRetCode));

		FC3DestroyHandle((FC3_t *)&hTemplate1);

		FC3DestroyHandle((FC3_t *)&hTemplate2);

		FC3DestroyHandle((FC3_t *)&hEncoder);

		FC3Uninitialize();

		free(pBitmap1);

		free(pBitmap2);

		return 0;

	}


	nRetCode = FC3Match(hMatcher, hTemplate1, hTemplate2, &dScore);

	if (nRetCode!=FPC_SUCCESS)

	{

		//printf("Error (%d) while matching templates: %s\n", (int)nRetCode, FC3GetErrorDescriptionA(nRetCode));

		FC3DestroyHandle((FC3_t *)&hTemplate1);

		FC3DestroyHandle((FC3_t *)&hTemplate2);

		FC3DestroyHandle((FC3_t *)&hEncoder);

		FC3DestroyHandle((FC3_t *)&hMatcher);

		FC3Uninitialize();

		free(pBitmap1);

		free(pBitmap2);

		return 0;

	}



	if (dScore!=0)

		match = dScore;



	FC3DestroyHandle((FC3_t *)&hTemplate1);

	FC3DestroyHandle((FC3_t *)&hTemplate2);

	FC3DestroyHandle((FC3_t *)&hEncoder);

	FC3DestroyHandle((FC3_t *)&hMatcher);

	free(pBitmap1);

	free(pBitmap2);

	nRetCode = FC3Uninitialize();


return match;

}

Und die Fehler die geworfen werden sind die folgenden:

Fehler 4 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_FC3Match@16" in Funktion ""double __cdecl FingerPrintMatchResult(struct tagBITMAPINFOHEADER,struct tagBITMAPINFOHEADER)" (?FingerPrintMatchResult@@YANUtagBITMAPINFOHEADER@@0@Z)". C:\_p10\DermalogInterface\DermalogInterface\DermalogInterface.obj DermalogInterface

Fehler 5 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_FC3CreateMatcher@4" in Funktion ""double __cdecl FingerPrintMatchResult(struct tagBITMAPINFOHEADER,struct tagBITMAPINFOHEADER)" (?FingerPrintMatchResult@@YANUtagBITMAPINFOHEADER@@0@Z)". C:\_p10\DermalogInterface\DermalogInterface\DermalogInterface.obj DermalogInterface

Fehler 6 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_FC3GetTemplateData@12" in Funktion ""double __cdecl FingerPrintMatchResult(struct tagBITMAPINFOHEADER,struct tagBITMAPINFOHEADER)" (?FingerPrintMatchResult@@YANUtagBITMAPINFOHEADER@@0@Z)". C:\_p10\DermalogInterface\DermalogInterface\DermalogInterface.obj DermalogInterface

Fehler 7 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_FC3GetPropertyDoubleA@12" in Funktion ""double __cdecl FingerPrintMatchResult(struct tagBITMAPINFOHEADER,struct tagBITMAPINFOHEADER)" (?FingerPrintMatchResult@@YANUtagBITMAPINFOHEADER@@0@Z)". C:\_p10\DermalogInterface\DermalogInterface\DermalogInterface.obj DermalogInterface

Fehler 8 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_FC3Encode@16" in Funktion ""double __cdecl FingerPrintMatchResult(struct tagBITMAPINFOHEADER,struct tagBITMAPINFOHEADER)" (?FingerPrintMatchResult@@YANUtagBITMAPINFOHEADER@@0@Z)". C:\_p10\DermalogInterface\DermalogInterface\DermalogInterface.obj DermalogInterface

Fehler 9 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_FC3SetPropertyA@12" in Funktion ""double __cdecl FingerPrintMatchResult(struct tagBITMAPINFOHEADER,struct tagBITMAPINFOHEADER)" (?FingerPrintMatchResult@@YANUtagBITMAPINFOHEADER@@0@Z)". C:\_p10\DermalogInterface\DermalogInterface\DermalogInterface.obj DermalogInterface

Fehler 10 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_FC3CreateEncoder@4" in Funktion ""double __cdecl FingerPrintMatchResult(struct tagBITMAPINFOHEADER,struct tagBITMAPINFOHEADER)" (?FingerPrintMatchResult@@YANUtagBITMAPINFOHEADER@@0@Z)". C:\_p10\DermalogInterface\DermalogInterface\DermalogInterface.obj DermalogInterface

Fehler 11 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_FC3DestroyHandle@4" in Funktion ""double __cdecl FingerPrintMatchResult(struct tagBITMAPINFOHEADER,struct tagBITMAPINFOHEADER)" (?FingerPrintMatchResult@@YANUtagBITMAPINFOHEADER@@0@Z)". C:\_p10\DermalogInterface\DermalogInterface\DermalogInterface.obj DermalogInterface

Fehler 12 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_FC3Uninitialize@0" in Funktion ""double __cdecl FingerPrintMatchResult(struct tagBITMAPINFOHEADER,struct tagBITMAPINFOHEADER)" (?FingerPrintMatchResult@@YANUtagBITMAPINFOHEADER@@0@Z)". C:\_p10\DermalogInterface\DermalogInterface\DermalogInterface.obj DermalogInterface

Fehler 13 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_FC3CreateTemplate@4" in Funktion ""double __cdecl FingerPrintMatchResult(struct tagBITMAPINFOHEADER,struct tagBITMAPINFOHEADER)" (?FingerPrintMatchResult@@YANUtagBITMAPINFOHEADER@@0@Z)". C:\_p10\DermalogInterface\DermalogInterface\DermalogInterface.obj DermalogInterface

Fehler 14 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_FC3GetErrorDescriptionA@4" in Funktion ""double __cdecl FingerPrintMatchResult(struct tagBITMAPINFOHEADER,struct tagBITMAPINFOHEADER)" (?FingerPrintMatchResult@@YANUtagBITMAPINFOHEADER@@0@Z)". C:\_p10\DermalogInterface\DermalogInterface\DermalogInterface.obj DermalogInterface

Fehler 15 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_FC3Initialize@4" in Funktion ""double __cdecl FingerPrintMatchResult(struct tagBITMAPINFOHEADER,struct tagBITMAPINFOHEADER)" (?FingerPrintMatchResult@@YANUtagBITMAPINFOHEADER@@0@Z)". C:\_p10\DermalogInterface\DermalogInterface\DermalogInterface.obj DermalogInterface

Fehler 16 error LNK1120: 12 nicht aufgelöste externe Verweise. C:\_p10\DermalogInterface\Debug\DermalogInterface.dll DermalogInterface

Entweder hab ich Tomaten auf den Augen oder ich bin einfach nur zu dämlich um es zu checken....

Die entsprechende Fehlerdefinitionsseite auf der MSDN hat leider zu keinem Erfolgserlebnis geführt.

Eventuell seht ihr mehr als ich.

lg

Gateway

Bearbeitet von Gateway_man
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi,

nochmal mein wenigkeit. Ich bin gerade dabei meinen .NET Ini Parser in Cpp zu portieren.

Jetzt bekomm ich vom Linker wieder einen Fehler das scheinbar wieder etwas vergessen wurde.

Ich versteh nicht ganz was da fehlen soll, da eigentlich alles in dem dll Projekt definiert wurde was genutzt wird. Auch die entsprechenden header (string, vector etc.) wurden eingebunden.

Es geht um folgende Funktion:


void Ini::WriteToFile(){

	if (this->filename.length() > 0){

		ofstream inifile;

		inifile.open(filename,ios::out);

		for (vector<Section>::size_type i=0; i< sections.size();i++){

		vector<KVP> kvp = sections[i].GetEntries();

		inifile << "[" << sections[i].GetName() << "]" << "\n";

		for (vector<KVP>::size_type i2=0;i2< kvp.size();i2++){

                   [B]//Sobald ich die nachfolgende zeile wieder einebziehe schmeißt er den Fehler.[/B]			

                        //string kvpline = kvp[i2].GetKey() + "=" + kvp[i2].GetValue();

			//inifile << kvpline << "\n";

		}

		}

		inifile.flush();

		inifile.close();

	}

}

KVP ist ist weiter oben definiert:

typedef KeyValuePair<string,string> KVP;

Fehler:

Verweis auf nicht aufgelöstes externes Symbol ""public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall KeyValuePair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >::GetKey(void)" (?GetKey@?$KeyValuePair@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V12@@@QAE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ)" in Funktion ""public: void __thiscall Ini::WriteToFile(void)" (?WriteToFile@Ini@@QAEXXZ)".

Wenn Ihr mehr Infos braucht dann werd ich gerne auch die restlichen header files reinstellen. Warscheinlich ist es eh wieder ne kleinigkeit die ich übersehn habe :upps.

lg

Gateway

Link zu diesem Kommentar
Auf anderen Seiten teilen

Eigentlich dachte ich schon das ich die definiert habe.

Es sei angemerkt das ich heute das erste mal mit templates in cpp gearbeitet habe. Sonst immer mit verketten listen...

Eventuell habe ich einen Fehler bei der Implementierung gemacht.

Hier ist das Headerfile von KeyValuePair:


#include "stdafx.h"

#include "targetver.h"


template <class K, class V>

class KeyValuePair{

public:

	KeyValuePair(K key, V value);

	K GetKey();

	V GetValue();

	void SetKey(K key);

	void SetValue(V value);


private:

	K key;

	V value;

};

Hier ist das dazugehörige cpp file:

#include "stdafx.h"

#include "KeyValuePair.h"



template <class K, class V>

KeyValuePair<K,V>::KeyValuePair(K key, V value){

	this->key = key;

	this->value = value;

}

template <class K, class V>

K KeyValuePair<K,V>::GetKey(){

return this->key;

}

template <class K, class V>

V KeyValuePair<K,V>::GetValue(){

	return this->value;

}

template <class K, class V>

void KeyValuePair<K,V>::SetKey(K key){

this->key = key;

}

template <class K, class V>

void KeyValuePair<K,V>::SetValue(V value){

this->value = value;

}

lg

Gateway

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ein Template wird nur da erzeugt, wo es benutzt wird. Und erzeugt werden kann es nur, wenn die Definition bekannt ist.

Dort, wo die Definition liegt, also in KeyValuePair.cpp, wird KeyValuePair<string, string> offenbar nicht verwendet. Und da, wo es verwendet wird, liegt die Definition nicht vor.

Wenn du vorher genau weißt, welche Konkretisierungen des Templates du brauchst, kannst du diese in KeyValuePair.cpp explizit erzeugen.

Wenn nicht, darfst du die Klasse nicht in Header und Cpp-Datei aufteilen, sondern musst alles in die Headerdatei stecken.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...