У меня есть это:
typedef string domanin_name;
А потом я пытаюсь перегрузить оператор <таким образом: </p>
bool operator<(const domain_name & left, const domain_name & right){
int pos_label_left = left.find_last_of('.');
int pos_label_right = right.find_last_of('.');
string label_left = left.substr(pos_label_left);
string label_right = right.substr(pos_label_right);
int last_pos_label_left=0, last_pos_label_right=0;
while(pos_label_left!=string::npos && pos_label_right!=string::npos){
if(label_left<label_right) return true;
else if(label_left>label_right) return false;
else{
last_pos_label_left = pos_label_left;
last_pos_label_right = pos_label_right;
pos_label_left = left.find_last_of('.', last_pos_label_left);
pos_label_right = right.find_last_of('.', last_pos_label_left);
label_left = left.substr(pos_label_left, last_pos_label_left);
label_right = right.substr(pos_label_right, last_pos_label_right);
}
}
}
Я знаю, что это странный способ перегрузить оператор <, но я должен сделать это следующим образом. Это должно делать то, что я хочу. Дело не в этом. </p>
Проблема в том, что он входит в бесконечный цикл прямо в этой строке:
if(label_left<label_right) return true;
Похоже, что он пытается использовать эту функцию перегрузки для сравнения, но label_left - это строка , а не доменное имя !
Есть предложения?