Die vertrauliche Verwendung von Klassen in der Liste der Variablen ohne Argumente mit c-Stil ist eine häufige Fehlerquelle. Beispiel:Gibt es eine Möglichkeit, die Verwendung einer Klasse nach Wert in c-Stil Variablenargumentenliste zu verbieten?
class MyString {
public:
char *pChars;
int Length;
MyString(char *pChars) {
this->pChars = pChars;
Length = strlen(pChars);
} };
int main() {
MyString s1("Bla1"), s2("Bla2");
printf("%s%s", s1, s2); // This does not but should give a compiler warning/error!
return 0; }
Der printf gibt die Objekte s zwei erhält von Wert. Das bedeutet, dass alle ihre Mitglieder einfach kopiert werden. Sie werden jedoch als einfache Zeichenzeiger interpretiert. Das Ergebnis ist natürlich ein Laufzeitfehler.
ich bitten, dies für eine Lösung bin nicht, aber ich möchte etwas habe ich zu meiner Klasse hinzufügen könnte, so dass der Compiler mir darüber oder gibt einen Fehler warnt.
Bereits versucht, einen Kopierkonstruktor zu deklarieren, aber nicht zu implementieren. Aber es scheint, dass kein Kopierkonstruktor aufgerufen wird. :-(
Bitte nur im Titel auf die Frage zu beantworten, ich brauche keinen discusson, warum Sie nicht printf oder diese Variable Argumente Listen verwenden sollten -. Wissen, dass
Vielen Dank für Ihre Zeit
..
Welchen Compiler benutzen Sie? – kennytm
"Ich brauche keine Diskussion darüber, warum Sie printf oder diese Listen mit variablen Argumenten nicht verwenden sollten - wissen Sie das." - Was stimmt nicht mit printf? – alternative
Ich benutze Visual C++ –