C ++:unique_ptr未正确初始化

时间:2017-04-10 14:46:20

标签: c++ unique-ptr

myMain.cpp

#include <memory>
#include "myClass.h"

static std::unique_ptr<myClass> classPtr; // Error thrown here
...

我正在全局范围内初始化,因为将所有数据加载到此类的属性中需要一段时间,所以我想做一次并保持该数据,直到我给出一个显式命令来删除它({{ 1}})。

当我尝试编译时:classPtr.reset(nullptr)我得到:g++ myMain.cpp -o myMain.o

为什么我收到此错误?

我在error: expected initializer before '<' tokenmyClass中定义了myClass.h;我认为错误与构造函数有关。我简化了代码和仅包括下面的重要部分。

myClass.cpp

myClass.h

编辑:根据@FrançoisAndrieux的提示,我修复了我的构造函数。

class myClass { std::string dataPath; std::vector<double> data; public: myClass(std::string P = "./path/to/data-file.csv"); ~myClass() {} const double findPercentile(double percentile = 0.0); }

myClass.cpp

2 个答案:

答案 0 :(得分:2)

有两个重要问题:

  1. 由于您使用的是gcc 4.8.5,请记得使用标记-std=c++11,否则std::unique_ptr将无法使用。

  2. 使用;结束您的班级定义。在声明类型时,C / C ++中需要使用分号。由于您未使用;,因此未将myClass声明为类型,因此,static std::unique_ptr<myClass> classPtr;行不会产生错误有效类型。

答案 1 :(得分:0)

您的data成员的初始化应该是

data(std::vector<double>())

或更简单

data()