2016-08-05 92 views
-3

Wir lernen Klassen und ich mache meine Aufgabe, eine Klasse und 5 verschiedene Objekte zu schreiben und den Unterschied anzuzeigen.Ich habe Daten, aber es sagt, kann Variable "Daten" nicht lösen

Der Professor sagte, dass wir Standardkonstruktoren verwenden sollten, und das Buch sagt dies:

Ein Standard-Konstruktor ist ein Konstruktor, der ohne Argumente aufgerufen werden kann (entweder mit einer leeren Parameterliste definiert sind, oder mit Standard Argumente für jeden Parameter angegeben).

Ich mache genau das, was der Lehrer getan hat; kannst du mir bitte sagen, warum es sagt, dass es data nicht finden kann?

#include <iostream> 

using namespace std; 

class theC 
{ 
private: 
    string data; 
public: 
    theC() { 
     printf("default\n"); 
    } 
}; 

int main() 
{ 
    theC c1(); 
    theC c2(); 
    theC c3(); 
    theC c4(); 
    theC c5(); 

    c1.data = "different object 1"; 
    c2.data = "different object 2"; 
    c3.data = "different object 3"; 
    c4.data = "different object 4"; 
    c5.data = "different object 5"; 
    cout << c1.data << c2.data << c3.data << c4.data << c5.data; 
    return 0; 
} 
+7

Sie müssen sich über die [Mitglied Zugriffsbezeichner] lernen (http://en.cppreference.com/w/cpp/language/access), was es bedeutet, wenn ein Teilnehmer "privat" ist. –

+3

Und 'theC c1();' ist Funktionsdeklaration. Ändern Sie es in 'theC c1;', dasselbe für andere. – songyuanyao

+0

[Zugriffsspezifizierer] (http://en.cppreference.com/w/cpp/language/access) –

Antwort

4

Ihr Code hat mehrere Probleme:

Ausgabe ein: Ist in diesen Zeilen:

theC c1(); 
theC c2();  
theC c3(); 
theC c4(); 
theC c5(); 

Hier können Sie versuchen, eine Instanz (Objekt) der Klasse theC zu erklären. Allerdings hält den Compiler es als Function Declaration und die Prototype eine Funktion namens c1, die Null oder keine Parameter (() leer ist) und gibt ein Objekt vom Typ theC.

Die korrekte Syntax für ein Objekt der Klasse erklären würde: theC c1;

Also Ihr Standard-Konstruktor wird so schnell aufgerufen werden, wie Sie eine Variable der Klasse deklarieren. So funktioniert es.

Ausgabe zwei: Auch Sie nicht jedes "Privat" Mitglied zugreifen können. Sie müssten es "Public" oder Sie müssten getters and setters verwenden.

Ausgabe drei: Sie verwenden eine der string Klasse ohne #include <string>.

+0

Ich habe es getan und es funktioniert, aber es zeigt alles auf einer Linie wissen Sie warum? –

+0

Dein Code tut ** genau ** wie du ihn geschrieben hast: 'cout << c1.data << c2.data << c3.data << c4.data << c5.data;' –

+0

oh yeah! Ich werde es lösen .. Danke !!! –

2

Diese Erklärungen

int main() 
{ 
    theC c1(); 
    theC c2(); 
    theC c3(); 
    theC c4(); 
    theC 
    c5(); 
//.. 

erklären Funktionen c1, c2, c3, c4 und c5 mit Rückgabetyp theC und ohne Parameter.

schreiben statt

int main() 
{ 
    theC c1; 
    theC c2; 
    theC c3; 
    theC c4; 
    theC 
    c5; 
//... 

Auch Sie sollten mindestens umfassen Header <string> und <cstdio> weil das Programm Deklarationen aus diesen Header verwendet.

Berücksichtigen Sie, dass das Datenelement data als privat deklariert ist.So können Sie es nicht außerhalb der Klassendefinition zuzugreifen direkt wie

c1.data = "different object 1"; 
c2.data = "different object 2"; 
c3.data = "different object 3"; 
c4.data = "different object 4"; 
c5.data = "different object 5"; 
+0

Warum die ''? –

+1

@FirstStep Ich schrieb das mindestens ... Er verwendet die Standard-C-Funktion printf im Konstruktor. –

+0

Ich sage das, weil es ohne es funktioniert –