Hi,
ich habe Probleme eine Factory Klasse zu schreiben. Die Suche im
Internet hat mir auch nicht geholfen.
Soweit ich das verstanden habe, funktioniert das so:
1 | #include <iostream>
|
2 |
|
3 | class Context;
|
4 |
|
5 | class Buffer
|
6 | {
|
7 | private:
|
8 | Buffer();
|
9 |
|
10 | friend class Context;
|
11 | };
|
12 |
|
13 | class Context
|
14 | {
|
15 | public:
|
16 | unsigned int count;
|
17 | Context() : count(0) {}
|
18 |
|
19 | Buffer* CreateBuffer()
|
20 | {
|
21 | count++;
|
22 | return new Buffer();
|
23 | }
|
24 |
|
25 | void DestroyBuffer(Buffer* buf)
|
26 | {
|
27 | count--;
|
28 | delete buf;
|
29 | }
|
30 | };
|
31 |
|
32 |
|
33 | int main() {
|
34 | Context context;
|
35 | Buffer* buf = context.CreateBuffer();
|
36 |
|
37 | std::cout << context.count;
|
38 |
|
39 | context.DestroyBuffer(buf);
|
40 |
|
41 | std::cout << context.count;
|
42 |
|
43 | std::cin.get();
|
44 |
|
45 | return 0;
|
46 | }
|
Doch anstatt einem lauffähigen Programm bekomme ich einen Fehler bei
"return new Buffer();" (MinGW GCC):
1 | undefined reference to `Buffer::Buffer()
|
oder bei MSVC (2012) gleich einen Linkerfehler:
1 | error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""private: __thiscall Buffer::Buffer(void)" (??0Buffer@@AAE@XZ)" in Funktion ""public: class Buffer * __thiscall Context::CreateBuffer(void)" (?CreateBuffer@Context@@QAEPAVBuffer@@XZ)".
|
Was mache ich falsch und wie geht es richtig?
Vielen Dank im Voraus!