функциональный объект со стандартным выводом в переполнении стека

программа будет работать правильно, если без cout;
Зачем?
что-то не так с выходным кешем?

#include<algorithm>
#include<iostream>
#include<vector>

using namespace std;class fn
{
public:
int i;
bool operator()(int,int)
{
++i;
cout<<"what the poodles?\n";
}
};
int main()
{
vector<int> temp(9,9);
vector<int> tmp(2,3);
fn f;
vector<int>::iterator ite;
ite=find_first_of(temp.begin(),temp.end(),tmp.begin(),tmp.end(),f);
if(ite==temp.end())cout<<"Pomeranians!\n";
//cout<<"compared "<<f.i<<" time(s)\n";//if note this ,you'll get defferent output.
return 0;
}

1

Решение

Три мысли:

  1. fn::operator()(int, int) возвращает bool но не имеет возврата. Эта функция не подходит для C ++.

  2. Когда я исправляю эту строку, я получаю результат, который я ожидаю. Если первая часть ответа не решает вашу проблему, не могли бы вы уточнить в своем вопросе результаты, которые вы видите, и результаты, которые вы ожидаете, и примечание о том, как они отличаются.

  3. Вы также увеличиваете неинициализированную переменную fn::i, Это не поможет тебе. Вы должны инициализировать его в конструкторе. Если вы попытаетесь напечатать эту переменную (или проверить ее каким-либо образом), она может иметь любое значение, потому что ее начальное значение могло быть любым (возможно, 0, возможно, что-нибудь еще).


Чтобы уточнить, мой компилятор предупредил меня о следующей проблеме:

foo.cc:16:3: предупреждение: управление достигает конца не пустой функции [-Wreturn-type]

Чтобы это исправить, я добавил return false; в конце функтора, и я вижу следующий вывод, который имеет смысл для меня.

[11:47am][wlynch@watermelon /tmp] ./foo
what the poodles?
what the poodles?
what the poodles?
what the poodles?
what the poodles?
what the poodles?
what the poodles?
what the poodles?
what the poodles?
what the poodles?
what the poodles?
what the poodles?
what the poodles?
what the poodles?
what the poodles?
what the poodles?
what the poodles?
what the poodles?
Pomeranians!
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]