C++ Klasse 'nicht deklarierter Bezeichner"
Dies ist wirklich frustrierend, ich habe versucht mehrere Variationen von meiner Klasse und der Konstruktor, gesiebt durch die Seiten von google-Ergebnissen und anderen Fragen auf dieser Seite, aber ich kann T es herausfinden. Ich glaube, der Fehler ist etwas einfach, dass ich im Blick.
Fehler-code:
1>main.cpp(60): error C2065: 'Student' : undeclared identifier
1>main.cpp(60): error C2146: syntax error : missing ';' before identifier 'newStudent'
1>main.cpp(60): error C3861: 'newStudent': identifier not found
student.h
#ifndef STUDENT_H
#define STUDENT_H
class Student {
private:
static const int SIZE = 7; //initial size of the array
int *Students; //Students will point to the dynamically allocated array
//int numStudents; //number of students currently in the list
int rosterSize; //the current size of the roster
int student_id;
string name;
string classification;
public:
Student(); //constructor; initialize the list to be empty
~Student();
void set_id(int);
void set_name(string);
void set_class(string);
int print_id();
string print_name();
string print_class();
//void enrollStudent();
//void Print(ostream &output) const; //print the list to output
};
#endif
student.cpp
#include <iostream>
#include <string>
#include "student.h"
#define PROMPT "class> "
using namespace std;
Student::Student(){ //declared here right?
student_id = 0;
name = "";
classification = "";
}
Student::~Student(){
//delete Student
}
void Student::set_id( int i ){
student_id = i;
}
void Student::set_name( string n ){
name = n;
}
void Student::set_class( string c ){
classification = c;
}
int Student::print_id(){
return student_id;
}
string Student::print_name(){
return name;
}
string Student::print_class(){
return classification;
}
main.cpp
#include <iostream>
#include <string>
#include "student.h"
#define PROMPT "class> "
using namespace std;
//**** Implement Error Handling ****\\
enum errorType {
UNKNOWN_ERROR,
INPUT_ERROR,
HANDLER,
NUM_ERRORS
};
//error messages
string errorMessage[NUM_ERRORS]= {
"Unknown Error\n",
"Input Error\n",
};
//error handler
void handleError(errorType err) {
if(err > 0 && err < NUM_ERRORS)
cout<< "Error: "<< errorMessage[err];
else cout<< "Error: "<< errorMessage[UNKNOWN_ERROR];
}
//**** END Error Handling ****\\
void getInput() {
int id; string n, c;
cin>>id>>n>>c;
//cout<<id<<"-"<<n<<"-"<<c<<endl;
Student newStudent(); //****WORK DAMN U!
//set_id(id);
//print_id();
return;
}
int main() {
//Student newStudent(); /* <-- why doesn't this work?!*/
string input = "";
bool finished = false;
cout<<PROMPT; //prompt the user
while(!finished) {
if(input!="") cout<<PROMPT;
cin>>input;
if(input=="enroll") {
cout<<PROMPT<<"Enroll student:"<<endl;
getInput();
}
else if(input=="drop") {
cout<<PROMPT<<"Enter ID:"<<endl;
}
else if(input=="roster") {
cout<<"This will print formatted list of students"<<endl;
}
else if(input=="quit") {
finished=true;
}
else handleError(errorType(1));
}
}
Nur als Anmerkung, mein professor sagte, hinzufügen
#include student.h
zu meiner main.cpp
wäre mein Problem behoben. NATÜRLICH NICHT, weil ich es in meinem student.cpp ALSO DANKE. ಠ_ಠ
tl;dr hier ist ein kleiner Barebone-version, die bekommt gleiche Fehler:
#include<iostream>
#include<string>
#define PROMPT "class> "
using namespace std;
class Student {
private:
int student_id;
string name;
string classification;
public:
Student(); //constructor
~Student();
void set_id(int);
int print_id();
};
Student::Student(){
student_id = 0;
name = "";
classification = "";
}
Student::~Student(){
//delete Student
}
void Student::set_id( int i ){
student_id = i;
}
int Student::print_id(){
return student_id;
}
void messenger(){
int id;
Student newStudent();
cin>>id; //this will drop the name and class
newStudent.set_id(id);
newStudent.print_id();
return;
}
void main() {
//Student newStudent();
string input="";
bool finished=false;
cout<<PROMPT; //prompt the user
while(!finished) {
if(input!="") cout<<PROMPT;
cin>>input;
if(input=="enroll") {
cout<<PROMPT<<"Enroll student:"<<endl;
messenger();
//cin>>input;
//newStudent.enroll(input );
}
else if(input=="drop") {
cout<<PROMPT<<"Enter ID:"<<endl;
}
else if(input=="roster") {
cout<<"This will print formatted list of students"<<endl;
}
else if(input=="quit") {
finished=true;
}
}
}
- Haben Sie versucht, Ihre Professoren-Lösung? Hat es funktioniert? Was
#include
hat es buchstäblich zählen die angegebene Datei in der Quelle, mit dem Ergebnis wird eine Datei mit den enthaltenen Dateien und die Quelle. Wenn es in einer source-Datei, dann ist es nicht automatisch in einem anderen. Wenn"student.h"
ist nicht enthalten inmain.cpp
, wie würde dann die Funktionen inmain.cpp
wissen nichts über die Sachen, die deklariert, instudent.h
? - richtig, ich verstehe das professor ' s Aussage jetzt. zuerst dachte ich, es war überflüssig, Sie beide .cpp-Dateien, aber nicht das Problem zu beheben. Sind meine Konstruktor/Klasse falsch definiert? edit: ja, versucht Professoren-Lösung
- BTW, Klasse, ist ein reserviertes Wort in C++. Sind Sie sicher, dass #define-EINGABEAUFFORDERUNG "- Klasse> " wird nicht zu Problemen führen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie versucht, zu initialisieren, die Student-Objekt ohne die Klammern?
Dieser ruft den default-Konstruktor.
Was hast du mit
wird zum deklarieren einer Funktion die keine Parameter und gibt ein Student-Objekt.
int main() { ... }
Ihre
main()
muss wissen, was ist die ArtStudent
zu können, erstellen Sie Ihr Objekt ein.So Ihr professor ist richtig.
Jede Quelldatei kompiliert wird getrennt, wenn der compiler kompiliert
main.cpp
es muss sehen die definition der ArtStudent
.Es kann dies nur tun, wenn Sie den Kopfstudent.
definiert die Art inmain.cpp
. Beachten Sie, dass einschließlich der header instudent.cpp
hat keinen Einfluss auf die Tatsache, dass die definition gesehen werden muss, inmain.cpp
da beide von Ihnen zusammengestellt werden als separate Dateien.#include "student.h"
on line 3 main.cpp.