2016-12-20 1 views
0

を呼び出すようにしようとしているとき:一致するコンストラクタ私は次のような構造を持つクラスを持っている私のコードではデフォルトコンストラクタ

struct AutomatonNode { 
    ... 
    AutomatonNode(); 
    AutomatonNode(AutomatonNode &node); 
    ... 
}; 

デフォルトコンストラクタが実現以下ました。しかし

AutomatonNode::AutomatonNode() : 
    suffixLink(-1), 
    len(0) {}; 

を、コンパイル時に私を得ます次のエラー:

No matching constructor for initialization of 'SA::AutomatonNode'

この方法では:

すべてが所定の場所にあり、コンストラクタがpublic(構造体で、デフォルトではすべてのフィールドがpublic)なので、私にとっては奇妙に見えます。何か案は?クリアランスのための

アップルLLVMのバージョン7.3.0(打ち鳴らす-703.0.31)

対象:x86_64版 - アップルdarwin15.3.0

スレッドモデル:POSIX

+1

コピーコンストラクタがconstを取る場合は動作しますか? – MikeMB

答えて

3

エラーはデフォルトのコンストラクタとは関係ありません。 (それはどう思ったのですか?)

この問題は、コピーコンストラクタがその引数を非constという参照として受け入れている可能性が高いためです。 (nodesが何であるかに関する情報を提供しなかったので、確かに言うことはできません)nodesが標準コンテナである場合、標準push_backはconstへの参照としてその引数を受け入れます。そのような引数はコピーコンストラクタに渡すことはできません。したがって、エラー。

関連する問題