C++ 使用自定义字符串类作为c++;

C++ 使用自定义字符串类作为c++;,c++,string,dictionary,key,operator-overloading,C++,String,Dictionary,Key,Operator Overloading,当我尝试使用自定义字符串类作为键值时,我看到了这个错误 undefined reference to `operator<(DSString const&, DSString const&)' 对“operator”的未定义引用您的成员运算符要求左侧(即此指针指定的一侧)为非常量。向声明中添加const将解决此问题: bool DSString::operator< (const DSString& newData) const; bool-DSStrin

当我尝试使用自定义字符串类作为键值时,我看到了这个错误

undefined reference to `operator<(DSString const&, DSString const&)'

对“operator”的未定义引用您的成员运算符要求左侧(即
指针指定的一侧)为非
常量
。向声明中添加
const
将解决此问题:

bool DSString::operator< (const DSString& newData) const;
bool-DSString::operator<(const-DSString&newData)const;
while
循环的实现不正确:运算符返回的值与上次比较结果相对应。一旦发现差异,正确的实现应立即返回
true
false
;仅当相应位置的字符相同时,循环才应继续。此外,当到达两个字符串中较短字符串的末端时,循环应停止;当
字符串用完字符时,当前实现将停止,当另一个字符串较短时,将导致未定义的行为


“我让<操作符超负荷了,”怎么说?请出示代码。超载代码是绝对关键的。请回答这个问题来添加它。这修复了错误,但现在我看到了“不明确的重载”operator@Alex您是否有同一运营商的另一个独立实现?如果需要,请删除这两个实现中的一个,因为您只需要其中一个。我以前尝试过的一个解决方案没有被删除。@Alex太棒了!如果这对你有用,请考虑点击左边的复选标记来接受答案。我已经修改了它,所以它确保计数器小于两个字符串的长度来修正你的最后一个建议,尽管我不确定第一部分的意思。按照我理解代码的方式,当我将比较值设置为0时(只要两个字符串都不为空),它将始终至少执行一个循环。如果第一个字符不同,那么这些值将不同,循环将不会重复,然后根据哪个字符的值更高返回true或false。我不知道这与“发现差异后立即返回真或假”有什么区别
bool DSString::operator< (const DSString& newData) const;