究竟是什么导致对我的间接运算符和赋值运算符的未定义引用?

时间:2019-01-20 22:27:44

标签: c++ oop pointers operator-overloading heap

我目前正在课堂上模拟C ++中的“智能指针”。现在的目标是保持简单,并利用间接运算符将值分配给指针。这是我当前使用的蓝图。

select *
from Product p
where p.ProductType = 1
and (ProductCategory = 5 or ProductCatalogId =3)
and (
  @DateFrom is null
  or @DateTo is null
  or p.StartDate between @DateFrom and @DateTo
)

通过运算符,我已经像这样定义它们。

#ifndef PTR_H_
#define PTR_H_

template < typename T >
class ptr
{
private:
    T * p;
public:
    ptr< T >()
        : p(new T)
    {

    }
    ptr< T >(T* t)
        : p(t)
    {

    }
    ~ptr()
    {
        delete p;
    }
    ptr & operator*();
    ptr & operator=(T const & t);
};


#endif 

但是,当我尝试像这样在主体中按预期使用它们

#include <iostream>
#include "ptr.h"

template< typename T >
ptr< T > & ptr< T >::operator*()
{
    return(*p);
}

template< typename T >
ptr< T > & ptr< T >::operator=(T const & t)
{
    if (*p == t)
    {
        return *this;
    }
    else
    {
        delete p;
        p = new T;
        *p = t;
        return *this;
    }
}

我收到一条错误消息:“此行有多个标记-对#include <iostream> #include "ptr.h" int main() { ptr< int > p = new int; ptr< int > q; *p = 42; return 0; } ptr :: operator *()的未定义引用。

我知道未定义的引用通常用于操作符/函数签名,这些签名与您尝试使用它们的方式不匹配,那么我的此类签名到底出了什么问题?

0 个答案:

没有答案