error c2664 und error c2662 [gelöst - selbst] bitte begründung. ganz kurz
-
hallo.
ich bin neu hier und hab mal ne frage.folgendes.
es ist eine projektaufgabe.
keine angst, ihr sollt es nicht proggen.
ich hantiere gerade mir einer klasse rum. mit dieser läuft alles super.
meine getter funktionen laufen auch.aber funktionen welche ich selbst erstell habe machen probleme wie
error c2664 und error c2662.error c2664:
Fehler 1 error C2664: 'datenEingabe': Konvertierung des Parameters 1 von 'const CKondensator' in 'CKondensator &' nicht möglichich deklariere die konstante am anfang. will sie dan hier weiter geben
datenEingabe(ko);
da kommt dieser fehler.error c2662:
so sieht der erste prototyp aus:
void datenAusgabe(const CKondensator ko);so der zweite:
bool inDateiSchreiben(const CKondensator ko);lasse ich das schlüsselwort "const" raus, läuft es wunderbar.
dieses muss aber unbedingt dabei sein.ich habe meinen professor gefragt ob es ein fehler sei.
seine antwort: Schlüsselwort const im Prototypen und (!) bei der
Implementierung im Parameter angeben! Dann funktioniert es.im prototypen ist es ja und auch im funktionskopf nach der main funktion. aber wie ist es gemient wo er schreibt "bei der implementierung im parameter"?
den teil verstehe ich einfach nicht.
mit den fehlern kann ich nix anfangen und google half mir bis jetzt nicht weiter.für eure hilfe bin ich sehr dankbar.
-
Wie sieht Dein Copy-Constuctor aus. Hast Du dort evtl. const vergessen.
Bei dieser Form muss das Objekt kopiert werden (keine gute Idee, wenn man soweiso const vorsieht.
Dann kanst Du auch gleich eine Referenz benutzen.
-
Martin Richter schrieb:
Wie sieht Dein Copy-Constuctor aus. Hast Du dort evtl. const vergessen.
Bei dieser Form muss das Objekt kopiert werden (keine gute Idee, wenn man soweiso const vorsieht.
Dann kanst Du auch gleich eine Referenz benutzen.Hi.
Ich weiß gerade nicht was ein copy-constructor ist.
habe dieses thema neu behandelt und sollen es nun so machen.ich habe jetzt eine variable erstellt und die konstante auf die s´kopiert:
also so: CKondensator kondens = ko; (meine konstante)diese wird einer funktion über geben und zwar als call-by-reference.
jetzt meckert mein compiler nur noch wegen der constante und zwar sagt er:
Fehler 1 error C2662: 'CKondensator::getKapazitaet': this-Zeiger kann nicht von 'const CKondensator' in 'CKondensator &' konvertiert werden
also nur noch c2662 fehler.
der erste ist beseitigt.
-
Zeige mal die ganze Deklaration und Definition von CKondesator.
-
class CKondensator
{
private: //kein direkter Zugriff auf Variable
double kapazitaet;
string MaterialDielektrikum; // Isolationsmaterial
double relDielKonst; // s.TAbelle
string bauform; // Kondesatortyppublic:
void setWerte(double kap, double rD, string matDiel, string bf);
double getKapazitaet(void);
string getBauform(void);
double getRelDielKonst(void);
string getMaterialDielektrikum(void);};
als objekt habe ich in der main stehen
CKondensator ko;
meine funktionen in der main funktion.
Diese funktionen machen ärger. und ich find den fehler einfach nicht.
void datenAusgabe(ko);
bool inDateiSchreiben(ko);und nach der main.
Diese gibt nur 1en aus. wenn ich es mit ko mache kommt der fehler: "enthält typqualifiziere, welche nicht mit der memberfunktion kompatibel sind.
//@param1: Objekt mit den aktuellen Daten
void datenAusgabe(const CKondensator ko)
{
ko.getKapazitaet();
cout << setw(20) << right << "Kapazitaet[nF]" << setw(15) << right << "Bauform" << endl;
cout << setw(20) << right << **&CKondensator::**getKapazitaet << setw(15) << right << **&CKondensator::**getBauform << endl << endl;
cout << setw(20) << right << "rel. DielKonstante" << setw(15) << right << "Material Dielektrikum" << endl;
cout << setw(20) << right << &CKondensator::getRelDielKonst << setw(15) << right << &CKondensator::getMaterialDielektrikum << endl << endl;
}//AusgabeDiese gibt nur 1en aus. wenn ich es mit ko mache kommt der fehler: "enthält typqualifiziere, welche nicht mit der memberfunktion kompatibel sind.
bool inDateiSchreiben(const CKondensator ko)
{
bool res = false;
ofstream ziel; //Datei-Handle
string dateiName = "Kondensator.txt"; //Dateiname
ziel.open(dateiName.c_str(), ios::app); //Oeffnen der Datei
if(ziel) //Erfolgreiches Oeffnen - Abfrage
{
res = true;
ziel << endl << &CKondensator::getBauform << " " << **&CKondensator::**getKapazitaet << " " << &CKondensator::getMaterialDielektrikum << " " << **&CKondensator::**getRelDielKonst << endl;
}//if
ziel.close();
return res;
}// Datei schreiben
-
also mein problem liegt darin, dass ich die daten nicht ausgeben kann. weder in die datei noch auf die konsole.
ich möchte sie sozusagen nur auslesen. nix überschreiben.
die daten werden auch komplett mit dem objekt ko runter in die funktionen gegeben , aber ich bekomme die nicht ausgelesen.vielleicht kann mir auch jemand diesen satz erklären:
Sie müssen das Schlüsselwort const im Prototypen und (!) bei der Implementierung im Parameter angeben!
der dickgedruckte teil. wie gebe ich das const im parameter an?
-
so leute. ich habs.
es war so simpel.
finde ich. und das muss richtig sein, da es ja läuft :).
eine zeile, je funktion. und zwei stunden da sitzen. aber ---> erfolg
!
prototyp: void datenAusgabe(const CKondensator ko);
constanten dürfen nicht verändert werden.
also: CKondensator ausKond = ko; //kopie erstelltcout << endl << ausKond.getKapazitaet(); <---läuft.
aber, warum geht es mit der kopie, aber nicht mit dem original "ko" ? nur weil es eine constante ist?