Hallo,
ich bin gerade dabei mir eine DLL zu schreiben, innerhalb welcher ich n Objekte einer Klasse X erzeugen will und in einem Klassenarray ablegen, um später auf die Objekte zuzugreifen.
Ich habe mir jetzt folgende Array-Klasse (inspieriert durch den Beitrag in einem anderen Forum) geschrieben:
Innerhalb einer weiteren Klasse instanziiere ich meine Arrayklasse wie folgt
hardwareTypArray <hardwareTyp> vK_arr; ,
lege Objekte im Array ab
und
greife auf diese Elemente zu:
Wenn ich mir aus meinem ganzen Projekt jetzt eine DLL erstellen lassen möchte,
bekomme ich für jede Funktion meiner Arrayklasse den error LNK2019: Nicht aufgelöstes externes Symbol.
Kann mir jemand weiterhelfen, woran das liegen könnte?
(Die Includes müssten alle richtig gesetzt sein)
Viele Grüße
EntonH
ich bin gerade dabei mir eine DLL zu schreiben, innerhalb welcher ich n Objekte einer Klasse X erzeugen will und in einem Klassenarray ablegen, um später auf die Objekte zuzugreifen.
Ich habe mir jetzt folgende Array-Klasse (inspieriert durch den Beitrag in einem anderen Forum) geschrieben:
Code:
//////////////////////////////////////////////////////////////////////////////////
//Datei: hardwareTypArray.h
//
//////////////////////////////////////////////////////////////////////////////////
#pragma once
#include ".\hardwareTyp.h"
#define MAX_NO_OF_CHANNELS 256
template <class hardwareTyp>
class hardwareTypArray
{
public:
hardwareTypArray(int size = MAX_NO_OF_CHANNELS);
hardwareTypArray(const hardwareTypArray& temp);
~hardwareTypArray();
hardwareTyp& operator[](int index);
const hardwareTyp& operator[](int index) const;
const hardwareTypArray& operator=(const hardwareTypArray &vKa);
int getSize();
void grow(int newSize);
private:
hardwareTyp *vK_arr;
int arr_size;
};
/////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//Datei: hardwareTypArray.cpp
//
//////////////////////////////////////////////////////////////////////////////////
#include ".\hardwareTypArray.h"
//////////////////////////////////////////////////////////////////////////////////
template <class hardwareTyp>
hardwareTypArray<hardwareTyp>::hardwareTypArray(int size)
{
arr_size = size;
vK_arr=new hardwareTyp[arr_size];
for(int i=0;i<arr_size;i++)
vK_arr[i] = NULL;
}
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
template <class hardwareTyp>
hardwareTypArray<hardwareTyp>::hardwareTypArray(hardwareTypArray const &temp)
{
arr_size = temp.getSize();
vK_arr = new hardwareTyp[arr_size];
for (int i = 0; i<arr_size; i++)
vK_arr[i] = temp[i];
}
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
template <class hardwareTyp>
hardwareTypArray<hardwareTyp>::~hardwareTypArray()
{
delete [] vK_arr;
}
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
template <class hardwareTyp>
int hardwareTypArray<hardwareTyp>::getSize()
{
return arr_size;
}
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
template <class hardwareTyp>
void hardwareTypArray<hardwareTyp>::grow(int newSize)
{
// Diese Methode legt ein neues Array der neuen Größe an,
hardwareTyp *newData=new hardwareTyp[newSize];
// kopiert dann alle Werte des alten Arrays in das neue Array,
for(int i=0;i<arr_size;++i)
newData[i]=vK_arr[i];
// löscht das alte Array
delete[] vK_arr;
// und setzt dann die Attribute m_size und m_data auf die neuen Werte.
arr_size=newSize;
vK_arr=newData;
}
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
template <class hardwareTyp>
hardwareTyp& hardwareTypArray<hardwareTyp>::operator[](int index)
{
if(index < 0 || index >= MAX_NO_OF_CAN_CHANNELS)
{
cerr << "Array hardwareTyp: Out of Range!" << endl;
exit(1);
}
return vK_arr[index];
}
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
template <class hardwareTyp>
hardwareTyp const& hardwareTypArray<hardwareTyp>::operator[](int index) const
{
if(index < 0 || index >= MAX_NO_OF_CAN_CHANNELS)
{
cerr << "Array hardwareTyp: Out of Range!" << endl;
exit(1);
}
return vK_arr[index];
}
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
template <class hardwareTyp>
const hardwareTypArray<hardwareTyp>& hardwareTypArray<hardwareTyp>::operator=(const hardwareTypArray &vKa)
{
if (this == &vKa)
return *this;
delete [] vK_arr;
arr_size = vKa.getSize();
vK_arr = new hardwareTyp[arr_size];
for (int i = 0; i<arr_size; i++)
vK_arr[i] = vKa[i];
return *this;
}
//////////////////////////////////////////////////////////////////////////////////
Innerhalb einer weiteren Klasse instanziiere ich meine Arrayklasse wie folgt
hardwareTypArray <hardwareTyp> vK_arr; ,
lege Objekte im Array ab
Code:
(vK_arr[i] = *myhardwareTyp;)
greife auf diese Elemente zu:
Code:
retVal = vK_arr[i].start();
Wenn ich mir aus meinem ganzen Projekt jetzt eine DLL erstellen lassen möchte,
bekomme ich für jede Funktion meiner Arrayklasse den error LNK2019: Nicht aufgelöstes externes Symbol.
Kann mir jemand weiterhelfen, woran das liegen könnte?
(Die Includes müssten alle richtig gesetzt sein)
Viele Grüße
EntonH
Zuletzt bearbeitet: