Как перегрузить оператор = используя const char * и / или строку? - PullRequest
0 голосов
/ 17 ноября 2018

Я искал подобные вопросы, но я до сих пор не понимаю, почему в моем коде есть ошибка и как ее реализовать ...

Что я хочу сделать, это создать класс, который может бытьприсваивается string и char * точно так же, как std :: string ... http://www.cplusplus.com/reference/string/string/operator=/

  • string (1) string & operator = (const string & str);
  • c-string (2) string & operator = (const char * s);

Я могу написать

string str1 = "haha"; //way(2)
string str2 = str1; //way(1)

Итак, я пишу этот класс ...

class LinkedList
{
private:
    ListNode *first;
public:
    LinkedList():first(nullptr) {};
    LinkedList(const string &str);
    LinkedList& operator=(const string &str);
    LinkedList& operator=(const char *s);
    void Print_LinkedList();
    void Push_back(char c);
//    void Insert();
//    void Delete();
//    void Invert();
//    void Clear();
};

И часть метода ...

LinkedList& LinkedList::operator=(const string &str)
{
    if (str.length()%3 != 1)//legal string_input.length is 3n+1
    {
        cout << "LinkedList building error" << endl;
    }
    else
    {
        for (unsigned int i = 0; i < str.length(); i+=3)
        {
            this->Push_back(str.at(i));
        }
    }
    return *this;
}

LinkedList& LinkedList::operator=(const char *s)
{
//    if (???) //please give me some suggestions...
//    {
//        cout << "LinkedList building error" << endl;
//    }
//    else
//    {
//        for (???) //please give me some suggestions...
//        {
//            this->Push_back(???); //please give me some suggestions...
//        }
//    }
    this->Push_back('x');
    return *this;
}

И основная часть ...

int main()
{
    LinkedList linkedlist1;
    linkedlist1.Push_back('x');
    linkedlist1.Push_back('a');
    linkedlist1.Print_LinkedList();

    string str_test = "H->a";
    LinkedList linkedlist2(str_test);
    linkedlist2.Print_LinkedList();

    string str_test2 = "H->A->h->o";
    LinkedList linkedlist3 = str_test2;
    linkedlist3.Print_LinkedList();

    LinkedList linkedlist4 = "x"; //there's an error in this line
    linkedlist4.Print_LinkedList();

    return 0;
}

Затем компилятор говорит:

"error: conversion from 'const char [2]' to non-scalar type 'LinkedList' requested|"

Не могли бы вы сказать мне ...

1. Почему в моем коде ошибка компилятора?
2.Как я могу исправить ошибку?
3.Некоторые предложения по реализациив "LinkedList & LinkedList :: operator = (const char * s) {// как мне написать здесь}"

Спасибо за вашу помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...