Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 头文件中没有对构造函数的匹配函数调用_C++_C++11 - Fatal编程技术网

C++ 头文件中没有对构造函数的匹配函数调用

C++ 头文件中没有对构造函数的匹配函数调用,c++,c++11,C++,C++11,我曾见过类似的问题被问到,并尝试过他们的解决方案,但这些问题的答案似乎不起作用。我有以下代码: .h #include <iostream> #include <vector> #include <string> using std::string; using std::vector; struct DialogueNode; struct DialogueOption { string text; DialogueNode *nex

我曾见过类似的问题被问到,并尝试过他们的解决方案,但这些问题的答案似乎不起作用。我有以下代码:

.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;
};

这对我来说毫无意义,因为我已将构造函数定义为将
字符串作为参数。

您已将构造函数声明为:

DialogueNode(const string);
但定义为:

DialogueNode(const string &t);
这两个不一样;前者采用
常量字符串
,而后者采用
常量字符串
引用。您必须添加
来指定引用参数:

DialogueNode(const string &);

这是因为在构造函数中指定参数将是常量类型的字符串,并且在创建对象时传递字符串。类型不匹配是问题所在,可以将构造函数参数固定为字符串,也可以在创建对象时更改。

可能不相关,但什么是
对话\u节点
?看起来您尚未显示相关的code@P0W这是
DialogueTree
类中的
DialogueNode
指针向量,我将尽我所能附加snipper代码,处理不完整的代码。@chris我将发布完整的代码,只是认为它今年更具可读性way@quantik你不是在“删除指针”。。。您正在删除指针指向的对象。是的,你在向量中的“指针副本”,指向同一个对象,即刚刚被删除的对象,现在已经严重受损。我更新了这个问题,但这并不能解决这个问题,不幸的是,onconst参数可以匹配const参数(无论参数是否为引用)。这不是问题。谢谢你添加我的知识!是的,最初我不是推荐人,它给了我同样的问题。我决定做出改变,但没有完全更新程序。这并没有解决问题-不幸的是..这将导致类似“未在类中声明”或“未解决的外部”的错误,而不是帖子中关于参数传递的错误。
DialogueNode(const string &t);
DialogueNode(const string &);