3

次のクラス定義があります。

class Portal
{
   public:

   Portal( const vector<vec3> &vertices, shared_ptr<Sector> target );

   ...
};

別の場所で、次のようなクラスのインスタンスを作成したいと思います。

auto portal = make_shared<Portal>( portalVertices, target );

ただし、Visual Studio 2010 で次のエラー メッセージが表示されます。

エラー C2668: 'boost::make_shared': オーバーロードされた関数のあいまいな呼び出し

誰でも理由を教えてもらえますか? 単一のコンストラクターのみを定義します。ありがとうございました!

4

1 に答える 1

2

キーワード auto を使用しているため、C++11 の機能を使用していると思います。C++11 には も付属していstd::make_sharedます。

したがって、名前空間を追加してみてください:

auto portal = std::make_shared<Portal>( portalVertices, target );

また

auto portal = boost::make_shared<Portal>( portalVertices, target );

したがって、コード/ .C ファイルで通常行うことは次のとおりです。

using namespace std; // this is a "using" directive
....
void somefunction() {
    auto portal = make_shared<Portal>( ... );
}

あなたが言及したように、ヘッダーで指定していました

using boost::make_shared;

完全なヘッダー ファイルを確認したいと思います。実際には using ディレクティブが必要だったと思いますが、using 宣言が必要になりました。

この説明を見てください:

usingディレクティブ: http://msdn.microsoft.com/en-us/library/aewtdfs3%28v=vs.80%29.aspx

using宣言: http://msdn.microsoft.com/en-us/library/was37tzw%28v=vs.80%29.aspx

于 2011-12-02T13:41:48.973 に答える