2012-04-08 2 views
1

Я пытаюсь найти 2-х частей в векторе строк, и у меня есть то, что, как я думал, будет работать, а это не так. Я не могу использовать итераторы. Это мой код, он является частью более крупной программы, это единственная функция в программе с 5 функциями.Найти и удалить строку в векторе строк в C++

int deletenames() 
{ 
    ifstream inFile; 
    ofstream outFile; 
    string strFileName; 
    string strFName,strLName; 
    vector<string> vecStudent; 
    string strDFName, strDLName; 
    int i=0; 
    char line[80]; 
    //delets a name 
    cout << endl<< " Enter a name to be deleted(First and Last Name):"; 
    cin>>strDFName>>strDLName; 

    for(i<0;strDFName+ " "+strDLName=strFName+ " "+strLName; i++) 
    { 
     if(strDFName+ " "+strDLName=strFName+ " "+strLName) 
      { 
       vecStudent.erase; 
       cout << "Student Deleted"; 
     } 
    } 

    // open output file for writing 
    outFile.open(strFileName.c_str()); 
    if (outFile.fail()) 
    { 
     cout<<" Output file error! Student was not added"<<endl; 
     return -1; 
    } 

    //display the content of the vector 
    for(int i=0; i<vecStudent.size(); i++) 
     cout<< vecStudent[i]<<endl; 

    for(int i=0; i<vecStudent.size();i++) 
     outFile<<vecStudent[i]<<endl; 
    outFile.close(); 
return 0; 
} 

Я получаю следующие сообщения об ошибках от Microsoft Visual Studio, которые я использую для его компиляции.

main.cpp 
1>c:\users\ace\desktop\cpsc 1103 assingment 4\cpsc 1103 assingment 4\main.cpp(78): warning C4018: '<' : signed/unsigned mismatch 
1>c:\users\ace\desktop\cpsc 1103 assingment 4\cpsc 1103 assingment 4\main.cpp(64): warning C4101: 'line' : unreferenced local variable 
1>c:\users\ace\desktop\cpsc 1103 assingment 4\cpsc 1103 assingment 4\main.cpp(105): warning C4018: '<' : signed/unsigned mismatch 
1>c:\users\ace\desktop\cpsc 1103 assingment 4\cpsc 1103 assingment 4\main.cpp(108): warning C4018: '<' : signed/unsigned mismatch 
1>c:\users\ace\desktop\cpsc 1103 assingment 4\cpsc 1103 assingment 4\main.cpp(90): warning C4101: 'line' : unreferenced local variable 
1>c:\users\ace\desktop\cpsc 1103 assingment 4\cpsc 1103 assingment 4\main.cpp(132): warning C4018: '<' : signed/unsigned mismatch 
1>c:\users\ace\desktop\cpsc 1103 assingment 4\cpsc 1103 assingment 4\main.cpp(135): warning C4018: '<' : signed/unsigned mismatch 
1>c:\users\ace\desktop\cpsc 1103 assingment 4\cpsc 1103 assingment 4\main.cpp(122): warning C4101: 'line' : unreferenced local variable 
1>c:\users\ace\desktop\cpsc 1103 assingment 4\cpsc 1103 assingment 4\main.cpp(158): warning C4552: '<' : operator has no effect; expected operator with side-effect 
1>c:\users\ace\desktop\cpsc 1103 assingment 4\cpsc 1103 assingment 4\main.cpp(158): error C2451: conditional expression of type 'std::basic_string<_Elem,_Traits,_Ax>' is illegal 
1>   with 
1>   [ 
1>    _Elem=char, 
1>    _Traits=std::char_traits<char>, 
1>    _Ax=std::allocator<char> 
1>   ] 
1>   No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called 
1>c:\users\ace\desktop\cpsc 1103 assingment 4\cpsc 1103 assingment 4\main.cpp(160): error C2451: conditional expression of type 'std::basic_string<_Elem,_Traits,_Ax>' is illegal 
1>   with 
1>   [ 
1>    _Elem=char, 
1>    _Traits=std::char_traits<char>, 
1>    _Ax=std::allocator<char> 
1>   ] 
1>   No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called 
1>c:\users\ace\desktop\cpsc 1103 assingment 4\cpsc 1103 assingment 4\main.cpp(162): error C3867: 'std::vector<_Ty>::erase': function call missing argument list; use '&std::vector<_Ty>::erase' to create a pointer to member 
1>   with 
1>   [ 
1>    _Ty=std::string 
1>   ] 
1>c:\users\ace\desktop\cpsc 1103 assingment 4\cpsc 1103 assingment 4\main.cpp(179): warning C4018: '<' : signed/unsigned mismatch 
1>c:\users\ace\desktop\cpsc 1103 assingment 4\cpsc 1103 assingment 4\main.cpp(182): warning C4018: '<' : signed/unsigned mismatch 
+0

Что такое условие завершения цикла для первого цикла? –

+0

"* Я не могу использовать итераторы. *" Почему на земле нет ?? Почему вы можете использовать 'std :: vector <>', но не использовать основной интерфейс для указанного класса? И что вы думаете 'for (i <0; strDFName +" "+ strDLName = strFName +" "+ strLName; i ++)' делает? – ildjarn

+0

«Я не могу использовать итераторы» Ну, вы должны. – SigTerm

ответ

0

Представляется несомненным, что по крайней мере один (возможно, оба) из мест, которые Вы имеете для (x; a=b; a++) или if (a=b), вы на самом деле подразумевается сравнение вместо присваивания (т.е. вы намеревались использовать == вместо =) ,

В частности, в обоих случаях левая сторона является временным значением, созданным путем объединения некоторых строк. Вообще говоря, назначение на временное невозможно. Даже когда это возможно, это обычно ошибка.

Как и в стороне, вы также дублируете код для отображения содержимого массива (т. Е. У вас есть две копии этого кода). Кроме того, если это не для задания, где вам нужно делать что-то «вручную», вы, вероятно, захотите использовать std::find вместо написания цикла, чтобы найти строку.

+0

Это первое исследование программирования, и в инструкциях говорилось, что они не используют итераторы, и что это нужно сделать, используя цикл for для этого. Если вы не следуете инструкциям профессора, вы полностью не сможете полностью понять. – user1319815

Смежные вопросы