C++ Template: Zugriff auf private Methoden

Gast #2528428
Lesenswert?

Hallo Gemeinde.

Ich habe eine Template-Klasse definiert, kann nun aber nicht auf deren 
Methode zugreifen.
1
template<class T>
2
class Worker
3
{
4
  UINT32 doSome(T *);
5
  UINT32 doMore(std::string, sEinigeZahlen *,  std::string);
6
  void buildKeyMap(void);
7
};

Die main sieht folgendermaßen aus:
1
int main( void )
2
{
3
    Worker<sEinigeZahlen> myWorker1;
4
    Worker<sMehrereZahlen> myWorker2;
5

6
  myWorker2.buildKeyMap();
7

8
  return EXIT_SUCCESS;
9
}

Wieso sind die Methoden nicht aufrufbar z.B. buildKeyMap() ?
Die genaue Fehlermeldung lautet:
'Worker<T>::buildKeyMap' : cannot access private member declared in 
class 'Worker<T>'

Danke für eure Antwort(en).
#2528651
Lesenswert?

Ne.
Davon dass in C++ der einzige Unterschied zwischen struct und class 
darin besteht, dass bei class alles per default 'private' ist bzw. 
vererbt wird, während bei struct alles 'public' ist bzw. vererbt wird.
Ansonsten gibt es in C++ keinen Unterschied zwischen struct und class.

Da er keine entsprechenden public/private Angaben gemacht hat, 
allerdings eine class benutzt, sind daher alle Member private.
Würde er anstelle von class eine struct benutzen, wären alle Member per 
default public.
#2529125
Lesenswert?

Karl Heinz Buchegger schrieb:
> Ansonsten gibt es in C++ keinen Unterschied zwischen struct und class.

Sorry Karl Heinz, aber hier muss ich doch widersprechen.
Eine Klasse beinhaltet optional auch Methoden, genau das ist ja einer 
der wesentlichen 'Fortschritte' der objektorientierten Programmierung.
Ein struct kann nur Daten beinhalten.

Karl Heinz Buchegger schrieb:
> Würde er anstelle von class eine struct benutzen, wären alle Member per
> default public.

Das schon, aber er will auf eine Memberfunktion zugreifen.

Aber egal, der TO hat sich eh nicht mehr gemeldet, entweder hat der 
hinweis oben schon geholfen oder er arbeitet jetzt mal gründlich sein 
c++ Buch durch.
Grüße
#2529140
Lesenswert?

Peter II schrieb:
> man kann auch eine struct mit methoden bestücken, und diese sind dann
> alle Public.
Uuups, ehrlich? Ok, da merkt man daß ich nur wenig mit c++ und statt 
dessen die letzten Jahre nur mit Java und ab und an ein bischen mit c zu 
tun hatte.

Aber was soll das? Das öffnet dem Mischen von C und c++ Syntax das Tor 
noch mehr.
Gast #2529151
Lesenswert?

Udo Schmitt schrieb:
> Ein struct kann nur Daten beinhalten.

Servus Udo,

du verwechselst die struct in C mit der struct in C++. In C++ ist wie 
schon erwähnt der einzige unterschied zwischen einer Klasse und einer 
Struktur dass alle Komponenten public sind.

Sie auch
http://en.wikipedia.org/wiki/C%2B%2B_classes#Differences_between_struct_and_classes_in_C.2B.2B

Ps: Steht auch in vielen C++ Büchern. ;)
#2529161
Lesenswert?

Udo Schmitt schrieb:

> Aber was soll das?

Es erleichtert(e) die Übernahme von C Code nach C++ auf Source Code 
Ebene. Man konnte so den Spaghat schaffen um Code erst mal 
weiterverwenden zu können, ohne erst mal durch lange Editiersessions 
durch zu müssen.

struct werden in C++ als Klassen angesehen, nur eben aus historischen 
Gründen mit dem alten Schlüsselwort 'struct' und den notwendigen 
Zugeständnissen, damit ein C 'struct' sich in C++ erst mal syntaktisch 
und semantisch genau gleich verhält, wie es in C der Fall war. Und dann 
kommt noch der C++ Klassenüberbau dazu.

> Das öffnet dem Mischen von C und c++ Syntax das Tor
> noch mehr.

Das ist sowieso ein Fehler. C und C++ sind 2 verschiedene Sprachen. Das 
sich das eine aus dem anderen entwickelt hat, sollte man heutzutage als 
historische Tatsache ansehen, mehr aber auch nicht. C Code kann, mit 
Einschränkungen, nach C++ noch einigermassen einfach übernommen werden. 
Dabei sollte man es aber bewenden lassen. Die Schere zwischen 'echtem C' 
und dem was manchmal als das C-Subset von C++ angesehen wird, wird sich 
auch in Zukunft immer weiter aufmachen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren