2011-10-13 11 views
5

の削除コンストラクタに呼び出す:打ち鳴らす++のエラーメッセージC++ 0xの使用:私は、バージョン4.2と打ち鳴らす++に私のXcodeをアップグレードしたこんにちは

Apple clang version 3.0 (tags/Apple/clang-211.10.1) (based on LLVM 3.0svn) 
Target: x86_64-apple-darwin11.2.0 
Thread model: posix 

が試みが打ち鳴らすと、次のコードをコンパイルする-stdを= C++ 0xの

#include <memory> 
#include <limits> 
#include <boost/shared_ptr.hpp> 


class ilpConstraintImpl { 
public: 
    virtual ~ilpConstraintImpl() {} 
}; 


class ilpConstraint { 
public: 
    ilpConstraint(ilpConstraintImpl* implptr):impl(implptr) { } 
public: 
    boost::shared_ptr<ilpConstraintImpl> impl; 
}; 

class ilpExprImpl { 
public: 
    virtual ilpConstraint operator<= (const double rs)=0; 
    virtual ~ilpExprImpl() {} 
}; 



class ilpExpr { 
public: 
    virtual ~ilpExpr() {}; 
    ilpConstraint operator<= (const double rs) { return impl->operator<=(rs); } 
    ilpExpr(ilpExprImpl* implptr):impl(implptr) { } 
    boost::shared_ptr<ilpExprImpl> impl; 
}; 

私は次のエラーを取得する:

./test.h:46:54: error: call to deleted constructor of 'ilpConstraint' 
    ilpConstraint operator<= (const double rs) { return impl->operator<=(rs); } 
                 ^~~~~~~~~~~~~~~~~~~~ 
./test.h:28:7: note: function has been explicitly marked deleted here 
class ilpConstraint { 
    ^
1 error generated. 

は-std = C++ 0xの作品せずにコンパイル。

答えて

6

これは私にとってはうんざりのようです。私はこの動作を持たない後発のバージョンで作業しています。一時的な回避策として、ilpConstraintに明示的なコピーコンストラクタを指定してみてください。

+0

作品のそのようなもの...。 ) – plaisthos

+0

申し訳ありません。 libC++から 'std :: shared_ptr'を試すことができます。 "C++標準ライブラリ"設定の下でlibC++を選択する必要があります(デフォルトではありません)。 –

+0

私はboost_surrにコピーのコンストラクタが削除され、コピーを実行して優先されるコンストラクタのテンプレートに依存しているという問題があったことを覚えているようです。その後のバージョンでは、この問題が修正されました。 –

3

C++ 0xをサポートすることで、ブーストスマートポインタは移動コンストラクタを定義します。しかし、これは自動的に生成されたコピーコンストラクタと代入演算子による暗黙的なコピーを無効にします。

C++ 0xのサポートが検出された場合は、コピーコンストラクタと代入演算子を修正するブーストのスマートポインタ用のパッチがあります。 ここには次のようなものがあります:https://svn.boost.org/trac/boost/changeset/73202

1

私のクラスのメンバーの1人がデフォルトのコンストラクタを持っていないとき、同じ問題が発生しました。 \t ilpConstraint(CONST ilpConstraint&impcon):IMPL(impcon.impl){}、同じエラーメッセージでshared_ptrのために問題を移動 ようなコピーコンストラクタを追加

struct OrderContact { 
    std::string name; 
    std::string phone; 
    OrderContact() {} // error without this constructor 
    OrderContact(std::string contactName, std::string contactPhone) : name(contactName), phone(contactPhone) { 
    } 
}; 

class Order { 
public: 
    OrderContact contact; 
} 
+1

+1、私は今日この同じエラーメッセージに遭遇し、これが私の原因でした。 –

+0

同じですが、この問題に遭遇し、デフォルトのctorで修正されました – Graeme

+0

なぜdownvoteですか?説明してください、私は学びたいと思っています。 – Sebastian

関連する問題