Objekt einer fremden Klasse benutzen
-
Vielen Dank für eure Antworten.
Habe eure Vorschläge mal ausprobiert:
class CTabelle { CReader Readerobjekt; public: CTabelle() : Readerobjekt(1) {} ... };Jetzt bekomme ich zwei Fehlermeldungen:
error C2668: 'CTabelle::CTabelle': Mehrdeutiger Aufruf einer überladenen Funktion
warning C4520:'CTabelle': Mehrere Standardkonstruktoren angegebenHmm...verstehe ich nicht. In der CReader-Klasse habe ich den Standardkonstruktor (ohne Argumente) durch einen Konstruktor
ersetzt, der einen int-wert annimmt.
-
Hi,
ist nicht wirklich schwer .... er sagt eigentlich genau, was ihn stört:
Krommi schrieb:
...
error C2668: 'CTabelle::CTabelle': Mehrdeutiger Aufruf einer überladenen Funktion
warning C4520:'CTabelle': Mehrere Standardkonstruktoren angegeben
....Du hast mehrere Standardkonstruktoren in der Klassendefinition angegeben. Das sind die Dinger , die
- so aussehen, wie Funktionen (also hinten runde Klammern haben),
- genauso heißen wie die Klasse (in diesem Fall also CTabelle) und
- keinen Parameter übernehmen ("void" gilt auch als "kein Parameter")
Du hast also aller Wahrscheinlichkeit nach noch ein zweites
CTabelle()innerhalb der Klassendefinition stehen.
Gruß,
Simon2.
-
oder er hat bei seinem Konstruktor mit int Parameter einen Defaultwert angegeben.
-
Braunstein schrieb:
oder er hat bei seinem Konstruktor mit int Parameter einen Defaultwert angegeben.
Stimmt ! War mir nicht eingefallen (liegt auch daran, dass ich Defaultparameter möglichst nicht verwende) ...

Gruß,
Simon2.
-
Simon2 schrieb:
Braunstein schrieb:
oder er hat bei seinem Konstruktor mit int Parameter einen Defaultwert angegeben.
Stimmt ! War mir nicht eingefallen (liegt auch daran, dass ich Defaultparameter möglichst nicht verwende) ...

Gruß,
Simon2.
Echt? Die benutze ich erst Recht ausgiebig, wo ich nur kann, weil ich sie immer in Sprache X sehr vermisse.
-
Artchi schrieb:
...Echt? Die benutze ich erst Recht ausgiebig, wo ich nur kann, weil ich sie immer in Sprache X sehr vermisse.
Tja, so unterschiedlich sind die Vorlieben.

Einerseits stört mich halt die Gefahr von Mehrdeutigkeiten und andererseits finde ich es seltsam, Funktionen, die unterschiedliches tun zusammenzupacken (wenn ich natürlich auch sehe, dass es bequem ist). (in der Abschätzung "... tun dasselbe, außer ..." betonen Defaultparameter eher das Erste, unterschiedliche Funktionen/Overloads eher das Zweitere)... aber es hängt wohl auch viel davon ab, was man konkret programmiert. In meinem Umfeld (technische Infrastruktur) kommt es eigentlich nie vor, dass ein Parameter wirklich optional ist. Entweder man braucht ihn immer ... oder nie. Alles Andere wäre (in meinem Umfeld) "Weiß-noch-nicht-so-genau-Programmierung" (oder anders gesagt: schlechtes Design).

Auch jeden Fall sehe ich es aber als Frage des persönlichen Geschmacks und Stils und würde niemals aus der Verwendung von Defaultparametern (allein) auf ein "schlechtes Programm" oder einen "schlechten Stil" schließen. Vielleicht entdecke ich die ja später auch noch mal für mich... (wäre nicht das erste Mal, dass sich mein Stil ändert).
Gruß,
Simon2.
-
Guten Morgen,
@ Simon2
du hattest recht...hatte wirklich einen zweiten Konstruktor in CTabelle stehen.So, bin jetzt auf nem guten Weg

habe jetzt nur noch einen Fehler, wenn ich
Reader1(1) in die Ini-Liste des CTabelle-Konstruktors einfüge:error C2436: 'Reader1': Memberfunktion oder geschachtelte Klasse in der Liste der Konstruktorinitialisierungen.
???
Bitte noch einen kleinen Tipp.
Grüße,
Krommi
-
Krommi schrieb:
Guten Morgen,
@ Simon2
du hattest recht...hatte wirklich einen zweiten Konstruktor in CTabelle stehen.So, bin jetzt auf nem guten Weg

habe jetzt nur noch einen Fehler, wenn ich
Reader1(1) in die Ini-Liste des CTabelle-Konstruktors einfüge:error C2436: 'Reader1': Memberfunktion oder geschachtelte Klasse in der Liste der Konstruktorinitialisierungen.
???
Bitte noch einen kleinen Tipp.
Grüße,
KrommiLaß doch mal kurz ein wenig Code dazu sehen ...
An sich sagt auch hier die Fehlermeldung genau aus, was Du falsch gemacht hast...Gruß,
Simon2.
-
Ok, hat alles geklappt...hatte noch einen Fehler im Konstruktor der Readerklasse.
Vielen Dank für die Hilfe.
-
Kann ich ein Objekt in einer Basisklasse als statisch initialisieren und von mehreren Klassen auf das gleiche Objekt zugreifen?
Ich erhalte immer die Fehlermeldung, dass ich keinen Zugriff auf private Elemente habe, obwohl ich nur auf Public-Funktionen des Objektes zuzugreifen versuche?
Danke für eure Hilfe,
Krommi
-
Du kannst etwas statisch deklarieren, musst es dann aber auch gleich initialisieren (in der entsprechenden .cpp) Dieses Objekt gehört dann allen Instanzen der Klasse.
Wenn dieses Objekt private ist kannst du natürlich nicht von auszerhalb der Klasse darauf zugreifen.
Etwas Code vielleicht?
EDIT: ich bin jetzt davon ausgegangen, dass statisch= static ist. Sollte ich das missverstanden haben bitte diesen Beitrag ignorieren.