Geg. sind folgende Dateien:
Code
// Personenverwaltung.h
template<class T>
class Personenverwaltung{
public:
T arr[3];
bool isSorted();
int compare(T t, int i);
T get(int i);
};
Alles anzeigen
C
// Personenverwaltung.cpp
#include "Personenverwaltung.h"
bool Personenverwaltung<class T>::isSorted(){
for(int i = 0; i < 2; i++){
if(arr[i] > arr[i+1]){
return false;
}
}
return true;
}
int Personenverwaltung<class T>::compare(T t, int i){
if(arr[i] > t) return 1;
return 0;
}
T Personenverwaltung<class T>::get(int i){
return arr[i];
}
Alles anzeigen
C
// main.cpp
#include <iostream>
#include <string>
#include "Personenverwaltung.h"
using namespace std;
class Person{
public:
Person(){}
string name;
Person(string name){
this->name = name;
}
bool operator>(Person& p){
return name.compare(p.name) > 0;
}
};
int main(){
Person p_0("Mueller"); Person p_1("Schreiner"); Person p_2("Gehrer");
Person p("Faerber");
Personenverwaltung<Person> pv;
pv.arr[0] = p_0;
pv.arr[1] = p_1;
pv.arr[2] = p_2;
cout << pv.isSorted() << endl;
cout << pv.compare(p,1) << endl;
cout << pv.get(2).name << endl;
return 0;
}
Alles anzeigen
und die daraus resultierende Fehlerausgabe
Code
Personenverwaltung.cpp
personenverwaltung.h(8) : error C2148: Gesamtgröße des Arrays darf 0x7fffffff Bytes nicht übersteigen.
personenverwaltung.cpp(5): Siehe Verweis auf die Instanziierung der gerade kompilierten Klassen-template "Personenverwaltung<T>".
with
[
T=T
]
personenverwaltung.h(8) : error C2079: 'Personenverwaltung<T>::arr' verwendet undefiniertes class 'T'
with
[
T=T
]
personenverwaltung.cpp(8) : error C2036: 'T *': Unbekannte Größe
personenverwaltung.cpp(8) : error C2036: 'T *': Unbekannte Größe
personenverwaltung.cpp(8) : error C2676: Binärer Operator '>': 'T' definiert diesen Operator oder eine Konvertierung in einen für den vordefinierten Operator geeigneten Typ nicht
personenverwaltung.cpp(8) : error C2036: 'T *': Unbekannte Größe
personenverwaltung.cpp(8) : error C2676: Binärer Operator '>': 'T' definiert diesen Operator oder eine Konvertierung in einen für den vordefinierten Operator geeigneten Typ nicht
personenverwaltung.cpp(23) : error C2027: Verwendung des undefinierten Typs "T"
personenverwaltung.cpp(5): Siehe Deklaration von 'T'
personenverwaltung.cpp(23) : error C2079: 'Personenverwaltung<T>::get' verwendet undefiniertes class 'T'
with
[
T=T
]
personenverwaltung.cpp(25) : error C2036: 'T *': Unbekannte Größe
Alles anzeigen
Mach ich die Implementierung 'inline' und geb alles in eine Datei, funktioniert alles:
C
// main_inline.cpp
#include <iostream>
#include <string>
using namespace std;
class Person{
public:
Person(){}
string name;
Person(string name){
this->name = name;
}
bool operator>(Person& p){
return name.compare(p.name) > 0;
}
};
template<class T>
class Personenverwaltung{
public:
T arr[3];
bool isSorted(){
for(int i = 0; i < 2; i++){
if(arr[i] > arr[i+1]){
return false;
}
}
return true;
}
int compare(T t, int i){
if(arr[i] > t) return 1;
return 0;
}
T get(int i){
return arr[i];
}
};
int main(){
Person p_0("Mueller"); Person p_1("Schreiner"); Person p_2("Gehrer");
Person p("Faerber");
Personenverwaltung<Person> pv;
pv.arr[0] = p_0;
pv.arr[1] = p_1;
pv.arr[2] = p_2;
cout << pv.isSorted() << endl;
cout << pv.compare(p,1) << endl;
cout << pv.get(2).name << endl;
return 0;
}
Alles anzeigen