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
a
std::vector
?@chris710抱歉,我忘了在前面的评论中提到您的名字来警告您。您必须在某个地方定义一个T,才能编译
节点*examplePointer
。你能发布一个小例子,用注释的可疑赋值编译吗?这只是一个输入错误。正如我所说,只为指针创建额外的运算符已经解决了这个问题。您希望
examplePointer=*example
做什么
intx=*example
可以正常工作,就像
examplePointer=&example
一样。我希望
examplePointer
指向
节点
您返回一个int&,但希望它是一个指针?