C++ 使用重载的*运算符取消对类的引用
我试图创建一个指向已重载*运算符的类的指针,但它返回另一个值。 类别代码:C++ 使用重载的*运算符取消对类的引用,c++,operators,dereference,C++,Operators,Dereference,我试图创建一个指向已重载*运算符的类的指针,但它返回另一个值。 类别代码: template<class T> class Node { public: T *pointer; T& operator*() { return *pointer; } } 模板类节点 { 公众: T*指针; T&运算符*() { 返回*指针; } } 那么此代码不起作用,返回int而不是指针: Node<int>* example
template<class T> class Node
{
public:
T *pointer;
T& operator*()
{
return *pointer;
}
}
模板类节点
{
公众:
T*指针;
T&运算符*()
{
返回*指针;
}
}
那么此代码不起作用,返回int而不是指针:
Node<int>* examplePointer; //this works
Node<int> example; //creates an instance of Node<T> class
examplePointer = *example; //this doesn't work
Node*示例指针//这很有效
节点示例//创建节点类的实例
examplePointer=*示例//这不管用
如何使用重载的*运算符生成指针?此节点*示例
表示示例
是节点
上的指针(是的,我是:))
如果随后将其与*
一起使用,则这意味着您只是取消了对节点
的访问指针的引用。所以,基本上你有这样的东西:
*example; // Just a pointer dereference expression type
// is something like Node<int>
**example; // something like: example->operator*();
*示例;//只是一个指针解引用表达式类型
//有点像节点
**例如;//类似于:示例->运算符*();
我真的不明白你的目标是什么。。。像这样使用指向容器的指针似乎会创建大量间接寻址
更一般地说,您不能在类定义之外重载
运算符*
,因此不能为指针定义它。请尝试节点示例。这将为您提供一个节点,*示例
将调用您的操作符-因此它的行为类似于指针。节点*示例
应该创建一个指向节点的指针
,但它只使用重载运算符,并使示例
成为int
@chris710节点*示例
声明了指向节点的指针,而不使用重载运算符。。下面是一个例子:好的,但是如何在其他情况下创建指针,比如exampleVector.push_back(*exampleNode)代码>?首先,为什么需要指针?您的节点
已经是指针上的包装器。第二,我需要一些类型签名来理解你想要什么。exampleVector
astd::vector
?@chris710抱歉,我忘了在前面的评论中提到您的名字来警告您。您必须在某个地方定义一个T,才能编译节点*examplePointer
。你能发布一个小例子,用注释的可疑赋值编译吗?这只是一个输入错误。正如我所说,只为指针创建额外的运算符已经解决了这个问题。您希望examplePointer=*example
做什么intx=*example
可以正常工作,就像examplePointer=&example
一样。我希望examplePointer
指向节点
您返回一个int&,但希望它是一个指针?