gpt4 book ai didi

c++ - 无法将 'this' 指针从 'const Node' 转换为 'Node &'

转载 作者:太空宇宙 更新时间:2023-11-04 11:34:19 24 4
gpt4 key购买 nike

我真的不明白为什么会出现这些错误:

  • 错误 1 ​​error C2662: 'void Node::setInfo(const Type &)': 无法将“this”指针从“const Node”转换为'节点&'
  • 错误 2 错误 C2662:'void Node::setLink(Node *)':无法转换
    'this' 从 'const Node' 到 'Node &' 的指针

这是我正在做的程序。

头文件:

#pragma once

#include <iostream>

using namespace std;

template <class Type>
class Node
{
private:
Type info;
Node<Type> *link;
public:
// Constructors
Node();
Node(const Type& elem, Node<Type> *ptr);
Node(const Node<Type> &otherNode);

// Destructor
~Node();

// Mutators and Accessors (getters and setters)
void setInfo(const Type& elem);
Type getInfo() const;

void setLink(Node<Type> *ptr);
Node<Type> * getLink() const;

// Overload the assignment operator
const Node<Type> & operator=(const Node<Type>&);
};

template <class Type> Node<Type>::Node()
{
link = NULL;
}

template <class Type> Node<Type>::Node(const Type& elem, Node<Type> *ptr)
{
info = elem;
link = ptr;
}

template <class Type> Node<Type>::Node(const Node<Type> &otherNode)
{
otherNode.setInfo(info); //ERROR 1
otherNode.setLink(link); // ERROR 2
}

template <class Type> Node<Type>::~Node()
{
// fill in this
}

template <class Type> void Node<Type>::setInfo(const Type& elem)
{
info = elem;
}

template <class Type> Type Node<Type>::getInfo() const
{
return info;
}

template <class Type> void Node<Type>::setLink(Node<Type> *ptr)
{
link = ptr;
}

template <class Type> Node<Type> * Node<Type>::getLink() const
{
return link;
}


template <class Type> const Node<Type> & Node<Type>::operator=(const Node<Type>& n)
{
info = n.info;
link = n.link;
}

主文件:

include "Node.h"
#include <string>
#include <iostream>
using namespace std;

int main()
{
Node<string> *node1 = new Node<string>();
node1->setInfo("Hello");
Node<string> *node2 = new Node<string>("Hello World!", node1);
Node<string> *node3 = new Node<string>(*node2);
Node<string> *node4 = new Node<string>();
node4->setInfo("Foo Bar");
node4->setLink(node3);

cout << node3->getLink()->getInfo() << endl; // should return "hello world"

system("pause");

return 0;
}

最佳答案

问题是您正试图修改一个常量对象。你的构造函数声明是

template <class Type> Node<Type>::Node(const Node<Type> &otherNode)

const 意味着您不能修改otherNode 对象。您只能在标记为 constotherNode 上调用方法。在您的 body 中,您尝试修改 otherNode 对象:

otherNode.setInfo(info); //ERROR 1
otherNode.setLink(link); // ERROR 2

在这种情况下,我认为将 otherNode 正确声明为 const 可以使您免于另一个问题。看起来您的复制构造函数实际上是将您的"new"节点复制到源节点中,而不是相反。

关于c++ - 无法将 'this' 指针从 'const Node' 转换为 'Node &',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23414431/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com