0

我在 Visual Studio 2013 预览版中之前的代码中使用了 std::unique_ptr,但我没有遇到问题。对于我最近的项目案例,在 Visual Studio 2012 中调试时编译器错误较少。所以现在我只收到以下错误

这是有问题的行:

std::unique_ptr<MyClass> classHolder;

以下是编译器所说的

  • “unique_ptr”:不是“std”的成员

  • 语法错误:缺少 ';' 在'<'之前

  • 缺少类型说明符 - 假定为 int。注意:C++ 不支持
    默认整数

  • ';' 之前的意外标记

关于如何解决此问题的任何想法?

样本:

#include <memory>
#include <string>
#include <sstream>
#include <boost/weak_ptr.hpp>
#include "JSAPIAuto.h"
#include "MyClass.h"

#ifndef H_CLASSHAVINGPROB
#define H_CLASSHAVINGPROB

class ClassHavingProb : public FB::JSAPIAuto //ClassHavingProb: this is the wrapper class if you are familiar with FireBreath(C++ to Javascript)
{
public:
    ClassHavingProb()
    {
        obj = std::unique_ptr<MyClass>(new MyClass(1));
//MyClass: this is the class reponsible for the functionalities, I've used unique_ptr so that class lifecycle will not be very problematic. If I used a regular pointer the class is not properly dismissed.
        //Some more init codes here
    }

    ~ClassHavingProb() {
        obj.release(); //the class must be dismissed
    }

private:
    std::unique_ptr<MyClass> obj;
};

#endif // H_CLASSHAVINGPROB
4

2 回答 2

1

好吧,由于 FireBreath 必须在没有 C++11 标准的旧浏览器上运行,我不知道如何解决您直接描述的问题,但您可以使用 boost scoped_ptr 类型而不是 unique_ptr。

于 2013-09-16T15:25:07.510 回答
0

我在 VS 2013 更新 4 中遇到了同样的问题,我刚刚写下了

 using namespace std;

它编译了!
在尝试使用 using 语句之前,我已经包含<memory>并使用std::unique_ptr<>了(就像您所做的那样),这会产生与您遇到的错误类似的错误。
但是,当我尝试使用时,using namespace std;事情得到了解决!
认为这可能对某人有所帮助

于 2015-10-24T07:05:42.860 回答