我目前正在课堂上模拟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 *()的未定义引用。
我知道未定义的引用通常用于操作符/函数签名,这些签名与您尝试使用它们的方式不匹配,那么我的此类签名到底出了什么问题?