Forum: PC-Programmierung C++ Template: Zugriff auf private Methoden


von Thomas (Gast)


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).

von Robert L. (lrlr)


Lesenswert?

weil die "private"  sind vielleicht?

von Thomas (Gast)


Lesenswert?

Okay Danke, ich erschieß´ mich...

von Udo S. (urschmitt)


Lesenswert?

sagen dir die Modifier "private", "public" oder "protected" irgendwas?
Du brauchst ein c++ Buch.

von Klaus W. (mfgkw)


Lesenswert?

mit struct statt class würde es gehen :-)

von Udo S. (urschmitt)


Lesenswert?

Klaus Wachtler schrieb:
> mit struct statt class würde es gehen :-)
Reden wir jetzt von objektorientierter Programmierung??? :-)

von Karl H. (kbuchegg)


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.

von Udo S. (urschmitt)


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

von Peter II (Gast)


Lesenswert?

Udo Schmitt schrieb:
> Sorry Karl Heinz, aber hier muss ich doch widersprechen.
> Eine Klasse beinhaltet auch Methoden,
man kann auch eine struct mit methoden bestücken, und diese sind dann 
alle Public.

von Udo S. (urschmitt)


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.

von Peter II (Gast)


Lesenswert?

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

ist doch ok, dann kann man jeweils vo beiden das beste nehmen (oder das 
schlechte wenn man will)

von Jemand (Gast)


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. ;)

von Udo S. (urschmitt)


Lesenswert?

Jemand schrieb:
> Ps: Steht auch in vielen C++ Büchern. ;)

Asche auf mein Haupt :-) Daheim steht der Stroustrup.

Das hatte ich bestimmt auch mal geleasen wie gesagt seit mindestens 5 
Jahren bin ich objektorientiert nur in Java unterwegs.

von Karl H. (kbuchegg)


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.

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.