我有一个clss学生,我在存储库的相同标题中使用它的成员函数没有问题...但是现在在这个函数中我得到一个错误:
..\StudentRepository.cpp:22:7: error: request for member 'setName' in 'st', which is of non-class type 'Student()'
这就是功能:
void StudentRepository::loadStudents(){
ifstream fl;
fl.open("studs.txt");
Student st();
string s,ss;
int loc;
if(fl.is_open()){
while(!(fl.eof())){
getline(fl,s);
loc = s.find(",");
ss = s.substr(0,loc);
st.setName(ss);
}
}
else{
cout<<"~~~ File couldn't be open! ~~~"<<endl;
}
fl.close();
}
我必须提到,在同一个文件中我使用它们,例如这个函数:
void StudentRepository::editStudent(Student A){
int i;
i = findByName(A.getName());
if( i != 0 || i != NULL){
students[i].setGroup(A.getGroup());
students[i].setId(A.getID());
}
else{
throw RepoException("The name does not exist!");
}
saveStudents();
}
答案 0 :(得分:4)
Student st();
应该是:
Student st;
Student st();
不会创建st
类型的对象Student
,它会通过名称st
声明一个函数,该函数不带参数并返回Student
宾语。
这在C ++中有时被称为 Most Vexing Parse 。
答案 1 :(得分:4)