2017-04-10 71 views
0

myMain.cpp初始化:C++:的unique_ptr不正确

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

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

我在全局范围内初始化,因为所有的数据加载到这个类的属性需要一段时间,所以我想这样做一次,并有该数据一直存在,直到我给出一个明确的命令来删除它(classPtr.reset(nullptr))。

当我尝试编译这个:g++ myMain.cpp -o myMain.o我得到:error: expected initializer before '<' token

为什么我得到这个错误?

我在myClass.hmyClass.cpp中定义了myClass;我认为这个错误与构造函数有关。我简化了代码&,仅包含下面的重要行。

myClass.h

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); 
} 

编辑:继从@FrançoisAndrieux我有固定我的构造函数提示。

myClass.cpp

myClass::myClass(const std::string P) : 
      dataPath(P) { 
    // read data-sets into class member variables 
} 
+0

注意与你的问题有关:你声明你的构造函数为'myClass(s​​td :: string)',但实现它为'myClass(const std :: string)'。你定义的参数具有默认值'“./path/to/data-file.csv”',但是你忽略了参数并始终使用默认值进行初始化。 –

回答

2

有两个显著的​​问题:

  1. 由于您使用的是gcc 4.8.5,请记住使用标志-std=c++11否则std::unique_ptr将不可用。

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

+0

@VladislavMartin你的例子没有说明你如何初始化'unique_ptr'。如果这是造成你的问题,那么显示它就很重要。 –

+0

我无法获取更新后的示例以产生您描述的错误。您需要提供[MCVE]。编写一个简短的自包含示例,在编译和执行时会产生您观察到的错误。 –

+0

@VladislavMartin你还没有。该示例有一些错误,但没有发现可能会导致您描述的错误。修复它们,我能够无误地编译示例。以您提供的示例为例,将其自身编译为新项目。如果您可以重现错误,请指出哪一行是由它引起的,以及您正在使用哪种编译器。 –

0

你对你data成员的初始化值应为

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

或者更简单地说

data()