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 '<' token
和myClass
中定义了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
答案 0 :(得分:2)
有两个重要问题:
由于您使用的是gcc 4.8.5,请记得使用标记-std=c++11
,否则std::unique_ptr
将无法使用。
使用;
结束您的班级定义。在声明类型时,C / C ++中需要使用分号。由于您未使用;
,因此未将myClass
声明为类型,因此,static std::unique_ptr<myClass> classPtr;
行不会产生错误有效类型。
答案 1 :(得分:0)
您的data
成员的初始化应该是
data(std::vector<double>())
或更简单
data()