我在将此链表格式化为TODO注释中的内容时遇到问题。我得到的错误是:
In file included from main.cpp:3:0:
Graph.h: In member function ‘std::__cxx11::string Graph::formatList()’:
Graph.h:63:14: error: invalid operands of types ‘std::__cxx11::string* {aka std::__cxx11::basic_string<char>*}’ and ‘LinkedListPtr {aka LinkedList<char>*}’ to binary ‘operator<<’
str << adjList << endl;
~~~~^~~~~~~~~~
Graph.h:65:17: error: could not convert ‘str’ from ‘std::__cxx11::string* {aka std::__cxx11::basic_string<char>*}’ to ‘std::__cxx11::string {aka std::__cxx11::basic_string<char>}’
return str;
^~~我的问题主要是在这种情况下如何使用<<=运算符。
我已经尝试创建一个字符串并将链表附加到它,我已经尝试使用在代码和cout <<中看到的str <<,但是那个库没有包含在那个类中。
string formatList(){
/* TODO (2):
*
* Return a string representation of the list.
*
* Each list should be written on a separate line, using the LinkedList's
* <<() function.
*
* Sample:
* [ B, D ]
* [ A ]
* [ D ]
* [ A, C ]
*/
string str;
str << adjList << endl;
return str;
}// end displayList()下面是方法重载的<<=方法
virtual string toString() const{
ostringstream oss;
oss << "[ ";
if ( !isEmpty() ) {
nodeptr_t iter = head->next;
while ( iter->next != tail ) {
oss << iter->element << ", ";
iter = iter->next;
}
oss << iter->element << " ";
}
oss << "]";
return oss.str();
}// end toString()我的期望是输出如下所示:
[ B, D ]
[ A ]
[ D ]
[ A, C ]而不是一个明显的错误。
谢谢。
发布于 2019-05-01 11:38:20
您的toString()不正确地遍历列表。它需要看起来更像这样:
virtual string toString() const {
ostringstream oss;
oss << "[ ";
if ( !isEmpty() ) {
nodeptr_t iter = head;
while ( iter != tail ) {
oss << iter->element << ", ";
iter = iter->next;
}
oss << iter->element << " ";
}
oss << "]";
return oss.str();
}// end toString()然后你可以像这样实现你的operator<<:
ostream& operator<<(ostream &os, const LinkedList &list) {
os << list.toString();
return os;
}至于错误消息,它与您显示的代码不匹配。错误消息引用的是std::string*指针,但在您显示的代码中,它使用的是std::string对象。但无论哪种方式,您的formatList()实现仍然是错误的,应该看起来更像这样:
string formatList() {
/* TODO (2):
*
* Return a string representation of the list.
*
* Each list should be written on a separate line, using the LinkedList's
* <<() function.
*
* Sample:
* [ B, D ]
* [ A ]
* [ D ]
* [ A, C ]
*/
ostringstream oss;
oss << *adjList << endl;
return oss.str();
}// end displayList()https://stackoverflow.com/questions/55930595
复制相似问题