1

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();
}
4

2 に答える 2

4
 Student st();

する必要があります:

 Student st;

Student st();パラメータをとらずにオブジェクトを返す名前で関数を宣言するstタイプのオブジェクトは作成しません。 StudentstStudent

これは、C++ではMostVexingParseと呼ばれることもあります。

于 2012-05-26T16:21:35.177 に答える
4

stの宣言から括弧を削除します。

Student st();
于 2012-05-26T16:22:14.257 に答える