C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Функция + vector + "E2188 Expression syntax", Ошибка опредиленя переменной в функции
FedorVlad
Отправлено: 25.07.2006, 11:54


Ученик-кочегар

Группа: Участник
Сообщений: 3



Привет Всем!
Нужна помошь!!!
Есть задача — нужна функция проверки наличии в масиве типа vector данных. При условии что переменная масива может изменяться!
Файл *.cpp
CODE

...
bool __fastcall CheckVectorPr (short int iCh_el, vector <short int> vTmp)
{
bool check = false;
 if (iCh_el == 0) return check;

 for (vector<short int>::iterator i =vTmp.begin(); i != vTmp.end(); i++)
 {
  if (iCh_el == *i) { check = true; break;}
 }

return check;
}
...

Файл *.h
CODE

...
bool __fastcall CheckVectorPr (short int iCh_el = 0, vector <short int> vTmp);
...


Выдаёт такую ошибку:
"E2188 Expression syntax"

Буду весьма признателен за помошь!
Asher
Отправлено: 25.07.2006, 12:21


Мастер участка

Группа: Модератор
Сообщений: 550



Привет.
А кто такой short int?
да и вектор лучше передавать по ссылке.
А еще лучше вместо всего этого воспользоваться std::find
FedorVlad
Отправлено: 25.07.2006, 16:37


Ученик-кочегар

Группа: Участник
Сообщений: 3



short int — тип даных, в вектроре
Вот что надо делать после:
CODE


vector <short int> vTmp1
vTmp1.push_back(15);
vTmp1.push_back(25);
vTmp1.push_back(15);
.....
vector <short int> vTmp2
vTmp2.push_back(13);
vTmp2.push_back(225);
vTmp2.push_back(155);
.....
if(CheckVectorPr (3, vTmp1))
{
....
}
else if (CheckVectorPr (3, vTmp2))
{
...
}
else
{
....
}
xTrim
Отправлено: 25.07.2006, 18:36


Машинист паровоза

Группа: Участник
Сообщений: 208



По первому вопросу:
CODE

...
bool __fastcall CheckVectorPr (short int iCh_el = 0, vector <short int> vTmp);
...

конечно не правильно, т.к. не может быть певый аргумент функции с умолчательным значением. Вернее может, если он и единственный, или остальные тоже с умолчательным. Короче, можно так
CODE

...
bool __fastcall CheckVectorPr (vector <short int> vTmp, short int iCh_el = 0);
...

Хотя не вижу смысла в этом. Зачем усложнят себе жизнь и запоминать что если передается один аргумент, то это означает что ищем 0? проще так и писать, имхо.

Во-вторых Asher правильно все сказал, передавать по ссылке и использовать std::find. Если нужна именно отдельная функция, то тогда как-то так
CODE

...
bool CheckVectorPr (vector <short int>& vTmp, short int iCh_el)
{
vector <short int>::iterator it = std::find(vTmp.begin(),vTmp.end(),iCh_el);
return (it!=vTmp.end());
}
...
FedorVlad
Отправлено: 28.07.2006, 11:13


Ученик-кочегар

Группа: Участник
Сообщений: 3



Благодарю за помошь!Буду пробовать!

Вернуться в Вопросы программирования в C++Builder