C++ 头文件中没有对构造函数的匹配函数调用
我曾见过类似的问题被问到,并尝试过他们的解决方案,但这些问题的答案似乎不起作用。我有以下代码: .hC++ 头文件中没有对构造函数的匹配函数调用,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
#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 &);