Also ich habe gerade mal testweise alle Templatedefinitionen entfernt und dann funktioniert alles super. Also muss es an dem Template liegen.
Habe gerade nochmals wiederholt mit dem Buch verglichen... sollte jedoch sweit stimmen. Der Fehler muss aber irgendwo in der CJaeger.h , CJaerger.cpp oder Main.cpp liegen.
Templates sind wirklich nicht hübsch, allein schon vom Code overhead ... dass muss man schon sagen
Hier mal mein Sourcecode:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
|
//Header Main.h
#include <iostream>
#include "CJaeger.h"
using namespace std;
#include "Main.h"
int main() {
CHase *pHase1;
CHase *pHase2;
CHase *pHase3;
CJaeger<float> jaeger;
pHase1 = new CHase("Fritz", 7676);
pHase2 = new CHase("Rudolf", 33);
pHase3 = new CHase("Heinz", 22);
jaeger.verarbeite(pHase1);
jaeger.verarbeite(pHase2);
jaeger.verarbeite(pHase3);
jaeger.auswerten(33);
delete pHase1;
pHase1 = NULL;
delete pHase2;
pHase2 = NULL;
delete pHase3;
pHase3 = NULL;
}
//Jaeger.h
#ifndef CJAEGER_H
#define CJAEGER_H
#include "CHase.h"
template <class T>
class CJaeger
{
public:
CJaeger(void);
~CJaeger(void);
void schiessen(const CHase &hase);
void verarbeite(CHase *hase);
void auswerten(T wert);
private:
static int counter;
int id;
T verarbeitet;
};
#endif
//CJaeger.cpp
#include "CJaeger.h"
template <class T>
int CJaeger<T>::counter;
template <class T>
CJaeger<T>::CJaeger(){
cout << "Initialisiere " << ++counter << endl;
id = counter;
}
template <class T>
CJaeger<T>::~CJaeger() {
cout << "Zerstoere " << id << endl;
}
template <class T>
void CJaeger<T>::schiessen(const CHase &hase) {
cout << "Schiesse: " << endl;
cout << "Name: " << hase.m_name;
cout << "Gewicht: " << hase.m_fGewicht;
}
template <class T>
void CJaeger<T>::verarbeite(CHase *hase) {
cout << "Verarbeite: " << endl;
cout << "Name: " << hase->m_name << endl;
cout << "Gewicht: " << hase->m_fGewicht << endl;
cout << endl;
hase->m_fGewicht -=200;
printf("Nachher: %f\n", hase->m_fGewicht);
}
template <class T>
void CJaeger<T>::auswerten(T wert) {
cout << "Ausgewertet: " << verarbeitet * wert;
}
//CHase.h
#ifndef CHASE_H
#define CHASE_H
#include <iostream>
using namespace std;
class CHase
{
public:
CHase(char name[], float gewicht);
~CHase(void);
char m_name[64];
float m_fGewicht;
};
#endif
//CHase.cpp
#include "CHase.h"
CHase::CHase(char name[], float gewicht)
{
for (int i = 0; i < 64; i++)
{
m_name[i] = name[i];
if(name[i] == '\0')
break;
}
}
CHase::~CHase(void)
{
printf("Hase wurde vergraben.\n");
}
|
Danke schonmal für deine Mühe