Это довольно простой вопрос, и я думаю, что это сводится к тому, законно ли это. У меня есть класс с перегруженными операторами ">" и "<". Я пытаюсь сделать одно утверждение, которое будет возвращать true или false без необходимости объявлять итератор для класса, просто для «простоты». </p>
Вот пример того, о чем я говорю:
class Guy
{
double bigness; //I'm not illiterate by the way
public:
bool operator>(const Guy& that) {return (this->bigness > that.bigness);}
};
Хорошо, это прямо здесь должно работать. Теперь я создаю два вектора типа «парень» и хочу сравнить два члена в одном выражении, чтобы получить значение истинности для этого выражения, например:
vector<Guy> gang, mafia;
bool mafiaWins = (*(mafia.begin()) > *(gang.begin()));
Я не заполнял вектор, поэтому я не получил бы ничего разумного из этого кода. Но как мне заставить работать выражение (mafia.begin ()> gang.begin ())? Я знаю, что они оба возвращают итераторы; но разыменование их не работает. Использование .front () дает мне ту же ошибку. Я получаю подтверждение наличия итератора без разыменования (разве это не разыменование?). Мне интересно, если проблема не в том, чтобы сначала не сохранить его в итераторе ...
Спасибо за внимание
Решение:
Таким образом, код, который у меня есть выше (отредактированный с момента моей первой публикации), должен работать для выражения. Это не тот код, который у меня был в моем .cpp, поэтому он такой грязный. Вам не нужно использовать ссылку произвольного доступа, если вы пытаетесь достичь только первого члена вектора, а front () будет ссылкой для первого члена. Изначально я оставил вектор пустым в этом посте, потому что думал, что заполнять их не имеет значения, и, сделав это, я случайно получил то, что было моей проблемой в моем коде. Функция, которую я получал, получая векторы и проверяя их элементы, не проверяла, существуют ли элементы, которые я сравнивал, или нет. Таким образом, для любого, кто сталкивается с подобной проблемой утверждения, вы, возможно, пытаетесь разыменовать то, что не существует. Для проверки, является ли вектор пустым, есть функция-член, которую можно использовать.
Example:
bool thereIsWar = (!(mafia.empty() && !(gang.empty()));
if(thereIsWar)
bool mafiaWins = (*(mafia.begin()) > *(gang.being()));
Надеюсь, это поможет любому с похожим вопросом