2017-10-20 18 views
1

同様の質問がありましたが、解決策を試しましたが、その回答はうまくいかないようです。エラーヘッダファイルのコンストラクタへの関数呼び出しの呼び出しが一致しません

error: no matching function for call to ‘DialogueNode:: DialogueNode(std::__cxx11::string&)’ DialogueNode *node = new DialogueNode(s);

EDITその他の注意事項:私はエラーを取得した.h

#include <iostream> 
#include <vector> 
#include <string> 
using std::string; using std::vector; 

struct DialogueNode; 

struct DialogueOption { 
    string text; 
    DialogueNode *next_node; 
    int return_code; 

    DialogueOption(string t, int rc, DialogueNode * nn) : text{t}, 
     return_code{rc}, next_node{nn} {} 
}; 

struct DialogueNode { 
    string text; 
    vector <DialogueOption> dialogue_options; 
    DialogueNode(); 
    DialogueNode(const string &); 
}; 

struct DialogueTree { 
    DialogueTree() {} 
    void init(); 
    void destroyTree(); 

    int performDialogue(); 
private: 
    vector <DialogueNode*> dialogue_nodes; 
}; 

た.cpp

#include "dialogue_tree.h" 

DialogueNode::DialogueNode(const string &t) : text{t} {} 

void DialogueTree::init() { 
    string s = "Hello"; 
    for(int i = 0; i < 5; i++) { 
     DialogueNode *node = new DialogueNode(s); 
     dialogue_nodes.push_back(node); 
     delete node; 
    } 
} 

void DialogueTree::destroyTree() { 

} 

int DialogueTree::performDialogue() { 
    return 0; 
} 

int main() { 
    return 0; 
} 

:私は、次のコードを持っています

dialogue_tree.h:17:8: note: candidate: DialogueNode::DialogueNode() dialogue_tree.h:17:8: note: candidate expects 0 arguments, 1 provided dialogue_tree.h:17:8: note: candidate: DialogueNode::DialogueNode(const DialogueNode&) dialogue_tree.h:17:8: note: no known conversion for argument 1 from ‘std::__cxx11::string {aka std::__cxx11::basic_string<char>}’ to ‘const DialogueNode&’ dialogue_tree.h:17:8: note: candidate: DialogueNode::DialogueNode(DialogueNode&&) dialogue_tree.h:17:8: note: no known conversion for argument 1 from ‘std::__cxx11::string {aka std::__cxx11::basic_string<char>}’ to ‘DialogueNode&&’ 

stringを引数として指定したコンストラクタがあるため、私には意味がありません。しかしとして定義し

DialogueNode(const string); 

:として

+0

「dialogue_nodes」とは無関係かもしれませんが、あなたは_relevant_コードを表示していないように見える – P0W

+0

@ P0Wそれは 'DialogueTree'クラスの' DialogueNode'ポインタのベクトルです。私はそのスニッパーコードも添付します – quantik

+2

不完全なコードでできることを最高にする、[再現できません] (https://wandbox.org/permlink/QnxPYc3STZWa9XSx)。 – chris

答えて

2

あなたのコンストラクタを宣言した

DialogueNode(const string &t); 

は、これら2つが同じではありません。前者はconst string、後者はconst stringとなります。あなたは、参照引数を指定する&を追加する必要があります:

DialogueNode(const string &); 
+0

同じエラーが発生する – quantik

+0

ああ、ちょうどあなたの編集に '&'を追加しました。 – frslm

+0

元々、私は参考にならなかったし、私に同じ問題を与えていた。私はその変更を行うことにして、プログラムを完全に更新しませんでした。これは問題を解決しませんでした。残念ながら.. – quantik

1

コンストラクタには、パラメータが一定の種類の文字列になることを指定していると、オブジェクトを作成するときに文字列を渡しているので、それがあります。型の不一致が問題です。コンストラクタパラメータを文字列に修正するか、オブジェクトを作成するときに変更します。

+0

私は問題を修正しましたが、これは残念ながら問題を解決しません – quantik

+2

非定数引数は、パラメータが参照であるかどうかにかかわらず、constパラメータと一致する可能性があります。これは問題ではありません。 – aschepler

+0

私の知識を追加してくれてありがとう! –

関連する問題