Я искал подобные вопросы, но я до сих пор не понимаю, почему в моем коде есть ошибка и как ее реализовать ...
Что я хочу сделать, это создать класс, который может бытьприсваивается 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) {// как мне написать здесь}"
Спасибо за вашу помощь.