2017-09-17 2 views
-1

Das Problem, das ich habe, wenn ich versuche, einige meiner Klassenvariablen in einem Array von 3 Klassenobjekten zu setzen, bekomme ich eine Fehlermeldung, dass die von der Funktion benötigten Variablen nicht sind im Rahmen der Hauptfunktion erklärt.Klassenvariablen, die nicht innerhalb der Hauptfunktion deklariert sind C++

Ich bin immer noch neu in Klassen und trennen meine Schnittstelle von meiner Implementierung und ich finde es manchmal verwirrend.

Ich habe einige andere Beispiele auf dieser Seite und andere gesehen und ich kann nicht genau herausfinden, was mein Problem ist und wie es zu beheben ist.

interface.h Datei:

#ifndef INTERFACE_H 
    #define INTERFACE_H 

    #include <iostream> 
    #include <string> 
    #include <fstream> 

    using namespace std; // I know this is a programming sin to include inside a header file but my textbook wants me to do it this way 

    class student 
    { 
    public: 
     student(); // class constructor 
     void setstudent(string studentName, string ID, string studentNumber, string diploma); // Function im using to set objects in array object 

    private: 
     string studentName; 
     string ID; 
     string studentNumber; // class variables 
     string diploma; 
     int averageMark; 
     string codes [5]; 
     int marks [5]; 
    }; 


    #endif // INTERFACE_H 

implementation.cpp Datei:

#include <iostream> 
#include "interface.h" 

using namespace std; 

student::student() 
{ 
    studentName = ""; 
    ID = ""; 
    studentNumber = ""; // constructor to initialise all class variables 
    diploma = ""; 
    averageMark = 0; 
    codes [5] = {"", "", "", "", ""}; 
    marks [5] = {0, 0, 0, 0, 0}; 
} 

void student::setstudent(string studentName, string ID, string studentNumber, string diploma) // function to set class variables 
{ 
    cout << "Please enter a student name" << endl; 
    cin.getline(studentName); 

    cout << "Please enter a unique student ID" << endl; 
    cin.getline(ID); 

    cout << "Please enter a unique student number" << endl; 
    cin.getline(studentNumber); 

    cout << "Please enter diploma name" << endl; 
    cin.getline(diploma) 
    if (diploma == "Garden Design") 
    { 
     codes[5] = {"G1","G2","G3","G4","G5"}; 
    } 
    else if (diploma == "Gourmet Cooking") 
    { 
     codes[5] = {"C1","C2","C3","C4","C5"}; 
    } 
} 

main.cpp-Datei:

#include <iostream> 
#include "interface.h" 

using namespace std; 

int main() 
{ 
    student studentDetails[3]; // Creation of class array object to store 3 objects/Maybe ive declared my array to hold 3 class objects incorrectly? 
    for (int i = 0; i < 3; i++) 
    { 
     studentDetails[i].setstudent(studentName, ID, studentNumber, diploma); // function call to set class variables for the objects 

    } 

    return 0; 
} 

Wenn jemand bitte darauf hinweisen, was ich habe falsch gemacht und mich in die richtige Richtung weisen würde sehr geschätzt werden.

Fehler von Codeblöcken:

||=== Build: Debug in student (compiler: GNU GCC Compiler) ===| 
C:\Users\nicbe\Desktop\Student\student\main.cpp||In function 'int main()':| 
C:\Users\nicbe\Desktop\Student\student\main.cpp|12|error: 'studentName' was not declared in this scope| 
C:\Users\nicbe\Desktop\Student\student\main.cpp|12|error: 'ID' was not declared in this scope| 
C:\Users\nicbe\Desktop\Student\student\main.cpp|12|error: 'studentNumber' was not declared in this scope| 
C:\Users\nicbe\Desktop\Student\student\main.cpp|12|error: 'diploma' was not declared in this scope| 
||=== Build failed: 4 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===| 
+1

'setstudent' sollte keine Parameter übernehmen. – tkausl

+2

Ihr 'Student'-Konstruktor funktioniert nicht so, wie Sie es erwarten. Sie definieren eine Menge * lokaler Variablen * und initialisieren sie. Die Klassenmitgliedsvariablen werden nicht initialisiert. Und die Member-Funktion, die Sie aufrufen, übergeben Sie Argumente, die Variablen sind, die nicht im Bereich der Hauptfunktion (oder im globalen Bereich) existieren. Es gibt auch viele andere Probleme, wie Sie versuchen, Arrays zuzuweisen. Alles in allem scheint es, als könntest du [ein paar gute Anfängerbücher zum Lesen] benutzen (http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list). –

+0

@tkausl Ja, es sollte, zumindest wurde es deklariert (und definiert) Argumente zu nehmen. Sonst wäre der Fehler anders. –

Antwort

0

Der Fehler ist genau das, was er sagt: Es wurde nicht erklärt.

in Ihre Hauptfunktion:

studentDetails[i].setstudent(studentName, ID, studentNumber, diploma); 

plötzlich diese vier Argumente erscheinen aus der Luft (?). Nicht sicher, ob Sie gerade diesen Teil oder was ausgeschlossen haben.

Verwandte Themen