C++ 链表c+中的打印功能+;

C++ 链表c+中的打印功能+;,c++,linked-list,C++,Linked List,这就是我正在编写的代码: template<typename T> inline void LinkList<T>::print() const { for (Iterator<int> iter = begin(); iter != end(); ++iter) { std::cout << *iter << std::endl; } return; } 当然,我不知道它是否按照预期的

这就是我正在编写的代码:

template<typename T>
inline void LinkList<T>::print() const
{
    for (Iterator<int> iter = begin(); iter != end(); ++iter)
    {
        std::cout << *iter << std::endl;
    }
    return;
}
当然,我不知道它是否按照预期的方式工作

您的
begin()
end()
函数不是
const
,因此它们不能在
LinkList
const
实例上调用。如果将
开始
结束
功能更改如下:

template<typename T>
inline const Iterator<T> LinkList<T>::begin() const
{
    return m_first;
}

template<typename T>
inline const Iterator<T> LinkList<T>::end() const
{
    return m_last;
}
模板
内联常量迭代器LinkList::begin()常量
{
首先返回m_;
}
模板
内联常量迭代器链接列表::end()常量
{
最后返回m_;
}
你应该没事的


或者,您可以将打印功能设置为非常量,但我不建议这样做。打印函数不应修改对象,因此打印函数上的
const
是有意义的。

我这样做了,并且在相同的行以及开始行和结束行上出现了更多错误:/这将允许将非const
迭代器
添加到
const链接列表中,这是不好的。我们需要
const\u迭代器
s来获得它right@CCC这几乎是正确的做法,但我们需要问题中的更多信息,以便能够准确地告诉您正确的做法是什么。@maximust_prime_是_463035818很好的观点,但这实际上取决于迭代器是什么。如果没有typedef,我们真的不能说。@magnized_prime_是_463035818,我想这就是为什么我要说的原因,我不知道它是否按预期的方式工作!这是一本可爱的书。这里有太多的问题是基于错误的信念,即compiles==逻辑上是正确的,并且在检查时做了一些事情(通常是强制转换),以删除错误消息,告诉询问者他们写的是错误的(有时是为什么)。
`const Iterator<T> LinkList<T>::begin(void)' cannot convert `this` pointer from `const LinkList<int>` to `LinlList<int>&`
template<typename T>
inline const Iterator<T> LinkList<T>::begin()
{
    return m_first;
}

template<typename T>
inline const Iterator<T> LinkList<T>::end()
{
    return m_last;
}
template<typename T>
inline const Iterator<T> LinkList<T>::begin()
{
    Node<T> *m_first;
    return m_first;
}

template<typename T>
inline const Iterator<T> LinkList<T>::end()
{
    Node<T>* m_last;
    return m_last;
}
template<typename T>
inline const Iterator<T> LinkList<T>::begin() const
{
    return m_first;
}

template<typename T>
inline const Iterator<T> LinkList<T>::end() const
{
    return m_last;
}