这真的很令人沮丧,我尝试了我的班级和构造函数的多种变体,筛选了谷歌搜索结果和本网站上的其他问题,但我无法弄明白。我相信这个错误很简单,我忽略了。
错误代码:
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));
}
}
就像一张纸条,我的教授说补充道
#include student.h
到我的main.cpp
会解决我的问题。显然不是因为我把它包含在我的student.cpp中,所以感谢。 ಠ_ಠ
tl; dr这是一个较小的准系统版本,它会出现同样的错误:
#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;
}
}
}
答案 0 :(得分:5)
您是否尝试在没有括号的情况下初始化Student对象?
Student newStudent;
这会调用默认构造函数。 你用
做了什么Student newStudent();
是声明一个不带参数的函数并返回一个Student对象。
答案 1 :(得分:4)
正如一张纸条,我的教授说添加
中#include student.h
到我的main.cpp
会解决我的问题。显然不是因为我把它包含在我的student.cpp
您的main()
需要知道能够创建其对象的Student
类型。
所以你的教授是正确的。
每个源文件都是单独编译的,所以当编译器编译main.cpp
时,需要 查看 类型Student
的定义。只有在student.
中包含定义类型的标题main.cpp
时才能执行此操作。请注意,在student.cpp
中包含标题与main.cpp
中需要查看定义的事实无关,因为它们都被编译为单独的文件。