La Classe C++ 'identificateur non déclaré"

C'est vraiment frustrant, j'ai essayé plusieurs variantes de ma classe et un constructeur, tamisée à travers les pages de résultats de google et d'autres questions sur ce site, mais je ne peux pas le comprendre. Je crois que l'erreur est quelque chose de simple que je suis surplombant.

Code d'erreur:

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

étudiant.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));
}
}

Juste une remarque, mon professeur dit en ajoutant
#inclure les étudiants.h

à mon main.cpp
permettrait de résoudre mon problème. ÉVIDEMMENT PAS parce que je l'ai inclus dans mon student.cpp DONC MERCI. ಠ_ಠ

tl;dr voici un petit barebones version qui prend les mêmes erreurs:

#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;
}
}
}
  • Avez-vous essayé de vos professeurs solution? Fait-il? Ce #include t-il littéralement inclure le fichier spécifié dans la source, avec pour résultat un fichier contenant à la fois les fichiers inclus et de la source. S'il est inclus dans un fichier source, il n'est pas automatiquement inclus dans un autre. Si "student.h" n'est pas inclus dans main.cpp, alors comment les fonctions dans main.cpp savez rien à propos de la substance déclarée dans student.h?
  • bon, je comprends les dires du professeur maintenant. au début, j'ai pensé qu'il était inutile de l'inclure à la fois .fichiers cpp, mais cela ne résout pas le problème. Sont mon constructeur/catégorie mal définie? edit: oui, essayé professeurs solution
  • BTW, la classe est un mot réservé en C++. Êtes-vous sûr que #définir l'INVITE "de la classe>" ne sera pas causer des problèmes?
InformationsquelleAutor conman | 2012-06-21