0

Visual Studio 2013 プレビューの以前のコードで std::unique_ptr を使用しましたが、問題はありません。私の最近のプロジェクトのケースでは、Visual Studio 2012 でのデバッグでコンパイラ エラーが少ないため、次のエラーのみが発生しました。

これは問題がある行です:

std::unique_ptr<MyClass> classHolder;

以下は、コンパイラが言うことです

  • 'unique_ptr' : 'std' のメンバーではありません

  • 構文エラー: ';' がありません 「<」の前

  • 型指定子がありません - int と見なされます。
    注: C++ はdefault-intをサポートしていません

  • 「;」の前に予期しないトークンがあります

この問題を解決するにはどうすればよいですか?

サンプル:

#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 標準を持たない古いブラウザで実行する必要があるため、直接説明している問題を修正する方法はわかりませんが、unique_ptr の代わりに boost scoped_ptr タイプを使用できます。

于 2013-09-16T15:25:07.510 に答える
0

私はVS 2013 update 4でまったく同じ問題を抱えていました。

 using namespace std;

そしてそれはコンパイルされました!usingステートメントを試す前に(あなたがしたように)
含め<memory>て使用しましたが、そこにあるようなエラーが生成されました。 しかし、使ってみると解決しました! これは誰かを助けるかもしれないと思ったstd::unique_ptr<>
using namespace std;

于 2015-10-24T07:05:42.860 に答える