Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;作为模板类成员的指针_C++_Templates - Fatal编程技术网

C++ C++;作为模板类成员的指针

C++ C++;作为模板类成员的指针,c++,templates,C++,Templates,我对模板类和模板函数非常陌生。所以这次我尝试创建我自己的可空类,它允许任何对象都有值或空值 template<typename _Type> class Nullable { private: _Type *_Pointer public: Nullable::Nullable(const _Type &x) { this->_Pointer = new _Type(x); }; 模板 类可为空 { 私人: _类型*\

我对模板类和模板函数非常陌生。所以这次我尝试创建我自己的可空类,它允许任何对象都有值或空值

template<typename _Type>
class Nullable
{
private: 
    _Type *_Pointer
public:
    Nullable::Nullable(const _Type &x)
    {
        this->_Pointer = new _Type(x);
    };
模板
类可为空
{
私人:
_类型*\u指针
公众:
Nullable::Nullable(const\u Type&x)
{
此->\u指针=新的\u类型(x);
};
但是,当我编译它时,它会返回两个错误:

  • C2059:语法错误:“此”
  • C2238:在“;”之前的意外标记
在上面的构造函数行中

所以,请向我解释如何为模板类正确编写构造函数。建议使用指针作为模板类的成员吗?
提前感谢。

问题1

行中缺少一个

_Type *_Pointer;
              ^^ missing
问题2

如果构造函数是内联定义的,则不能使用范围运算符

改变

Nullable::Nullable(const _Type &x) { ... }

吹毛求疵

您不需要构造函数定义末尾的

Nullable(const _Type &x)
{
    this->_Pointer = new _Type(x);
};
 ^^ Remove it.

将它放在那里不是错误,但它不是必需的。

问题1

行中缺少一个

_Type *_Pointer;
              ^^ missing
问题2

如果构造函数是内联定义的,则不能使用范围运算符

改变

Nullable::Nullable(const _Type &x) { ... }

吹毛求疵

构造函数定义末尾不需要

Nullable(const _Type &x)
{
    this->_Pointer = new _Type(x);
};
 ^^ Remove it.

将它放在那里不是一个错误,但它不是必需的。

当您以语法方式内联函数时,您所在的类的名称空间是隐式添加的,因此您试图定义Nullable::Nullable::Nullable。另一个要考虑的问题是,谁负责在构造函数中分配的内存,因为您的类不是空的't清理它。我建议不要使用原始指针,而是使用std::unique_ptr,这样当可为null的对象被销毁时,内存会自动清理。在语法内联函数中,会隐式添加您所在类的命名空间,因此您试图定义可为null::Nullable::Nullable.another要考虑的是谁负责在构造函数中分配的内存,因为您的类没有清理它。我建议您不要使用原始指针,而是使用std::unique_ptr,这样当您的可空对象被销毁时,内存会自动清理。哇,谢谢,它现在工作得很好。对不起错过“;”:D哦,谢谢,它现在工作得很好。错过“;”:D很抱歉