Forum: PC-Programmierung C++: Objektinstanzierung via friend Klasse (Factory)


von Christopher C. (Gast)


Lesenswert?

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!

von apr (Gast)


Lesenswert?

Implementiere Buffer::Buffer().

von Christopher C. (Gast)


Lesenswert?

Vielen Dank!
Wie konnte ich das übersehen? Jetzt läufts. Manchmal frag ich mich, 
warum der Kompiler/Linker nicht Klartext reden kann.

von apr (Gast)


Lesenswert?

Tut er doch. "undefined reference to Buffer::Buffer()"

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.