2017-09-28 6 views
-3

私は次のエラーメッセージを取得していますのがない実行可能なコンストラクタコピー変数:C++タイプ

main.cppに:第二コンストラクタ、communal(const T& instance)

「共同」タイプのない実行可能なコンストラクタコピー変数、次のメッセージが与えられます。

data.h:生きていない候補コンストラクタ:第1引数は「のconst int型&」から「共同」から知られていない変換

変換が後ろ向きになっているようです。コンバージョンへの変換をconst int &から行ってほしい。ここで暗黙の変換を行う方法はありますか?助けてくれてありがとう。

main.cppに:

communal<int> test_communal1 = 123; // Implicit initialization triggers error 

がdata.cpp:

template<typename T> 
struct communal : general_type::communal<T> 
{ 
    using super = general_type::communal<T>; 

    communal() : super(nullptr) {} 
    communal(const T& instance) : super(new T(instance)) {} 
    communal(const T* instance) : super(new T(instance)) {} 
    communal(communal<T>& instance) : super(instance) {} 
    communal(communal<T>* instance) : super(instance) {} 

    ~communal() 
    { 
     this->counter->deallocate([this]() 
     { 
      delete this->counter; 
      delete this->instance; 
     }); 
    } 
}; 
+1

:http://coliru.stacked-crooked.com/a/70f71efbc2b2666c は、「エラー:タイプの右辺値」に 『共同&』タイプの非const左辺値参照をバインドすることはできません共同体 '" –

+0

ありがとうございます@MooingDuck、私はエラーメッセージが同じかどうかを確認する継承なしでこれを試してみるつもりです。私はいくつかの奇妙な効果を持っている可能性があります3層の継承を使用します。何か理由がある場合は、私はそれを高く評価します。 –

+0

[最小限で完全で検証可能なサンプルを作成する方法] –

答えて

0

私はこれに対する解決策を考え出しました。私の意図は、communal(const T& instance)を処理する次の変換コンストラクタを取得することでした。私は自分のコピーコンストラクタのためにconstを残すという間違いをしました。何らかの理由で、障害のあるコピーコンストラクタを使用して、communal<int>からconst int&への潜在的な変換を推測していました。 constをコンストラクタに追加する際に、問題が修正されました。しかし、最初に変換コンストラクタを使用して優先順位を付けないバグがあるようです。たぶん、この問題をより深く勉強することで、変換コンストラクタに対して他のコンストラクタの優先順位を付けた理由をより深く理解することができました。しかし、それは今待たなければなりません。私が取得エラーメッセージではありません