【问题标题】:Set with Custom String Class Problem设置自定义字符串类问题
【发布时间】:2011-09-19 08:46:35
【问题描述】:

我编写了一个自定义字符串类。 我想用它设置 STL。我重载了运算符

error C2678: binary '=' : no operator found which takes a left-hand operand of type 'const     String' (or there is no acceptable conversion)
1>    could be 'String &String::operator =(const String &)'
1>           'String &String::operator =(const char *)'
1>          'String &String::operator =(const wchar_t *)'
1>          while trying to match the argument list '(const String, const String)'

我猜,它要求重载 operator= (const String , const String)

但是创建这样一个重载的函数是不可能的

我的 String 类是这样的

String ();
String (const char * pStr);
String (const long int pData);
String (const double  pData);
String (const int pData);
String (const wchar_t * pStr);
//Copy Constructors
String (const String& rhs);
String (const String& rhs, const int pStartIndex, const int pNumChar);

//Overloaded Operators
String & operator= (const String & rhs);
String & operator= (const char * rhs);

String & operator= (const wchar_t * rhs);
String   operator+ (const String& rhs);
//String &  operator+= (const char ch);
String & operator+= (const String& rhs);
friend bool operator== (const String& lhs, const String& rhs);

friend bool operator< (const String& lhs, const String& rhs) {

    return strcmp(lhs.vStr, rhs.vStr);
}

friend ostream& operator<< (ostream& ostr, String& rhs);

char & operator[] (int pIndex);
char   operator[] (int pIndex) const;

const char * String::Buffer () const;
wchar_t * GetTChar();

int String::GetLength () const;

~String ();

【问题讨论】:

  • 请添加一些最小但完整的代码来演示问题。您遇到的实际问题可能与您认为的无关。
  • 我的第一个猜测是您尝试创建 set&lt;String const&gt; 而不是 set&lt;String&gt;,但如果没有更多信息,很难判断。
  • 不,我正在使用set&lt;String&gt; var;,不,我不想打印字符串
  • 这个错误可能是一个红鲱鱼。你能告诉我们你的String类吗? (并解释你为什么不使用std::string
  • 我们正在使用自定义 String 类,因为我们被告知要这样做

标签: c++ operator-overloading set


【解决方案1】:

"没有找到采用 left-hand 类型为 'const String' 的操作数的运算符"

你好像有这样的表达方式

a=b;

ab 都是 const String

你不能给一个 const 赋值(尽管编译器看起来拼命寻找这样一个赋值的实现)

【讨论】:

  • 是的,这就是我无法理解的,不可能用两个常量参数创建 opeartor=
  • @Sumit:您很可能在某处滥用std::set,导致编译器需要这种不可能的重载,例如尝试分配给集合中的值。 String 类本身可能没问题。
  • @Sumit:是的,您无法创建该运算符,但编译器需要在某个地方使用它。问题不是字符串,而是你用它做了什么。
【解决方案2】:

好的,好吧,我只能用你提供的信息来回答你提出的问题,答案是this works for me

【讨论】:

    猜你喜欢
    • 2013-12-07
    • 2019-06-02
    • 1970-01-01
    • 2011-05-15
    • 1970-01-01
    • 1970-01-01
    • 2011-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多