gpt4 book ai didi

c++ - 如何修复 vector push_back 中的 "no instance of overloaded function"?

转载 作者:行者123 更新时间:2023-11-28 05:17:10 25 4
gpt4 key购买 nike

我想编写一个函数,该函数将指向指向字符串(字典)的 vector 指针的指针和指向 char (p) 的指针作为输入。该函数将检查 char 是否在字典中,如果不存在,它会将 p 添加到 vector 字典中。

我的代码:

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

std::vector<string *> dictionary;

void manageDictionary(vector<string *> * dictionary, char *p) {
for (unsigned int i = 0; i < (*dictionary).size(); i++) {
string * pstring = (*dictionary).at(i);
if ((*pstring).compare(p)) {
(*dictionary).push_back(p);
}
}
}

但是,visual studio 编译器显示我在 push_back 方法 ( . ) 之前的 if 语句中有错误。当我将鼠标悬停在错误上时,它显示“没有重载函数的实例”。

我添加了 std::vector<string *> dictionary;一开始还是想不通问题出在哪里。

最佳答案

dictionnarystd::string* 的 vector . std::string*char*是完全不相关的类型。从 char* 转换至 std::string*将要求您创建一个新的 string包含 p 的值对于你的字典,而不是传递 char*直接地。此更改将允许您的示例编译,但生成的函数容易出错。

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

void manageDictionnary(vector<string *> * dictionnary, char *p) {
for (unsigned int i = 0; i < (*dictionnary).size(); i++) {
string * pstring = (*dictionnary).at(i);
if ((*pstring).compare(p)) {
(*dictionnary).push_back(new string(p));
// Make a new string ^^^^^^^^^^
}
}
}

此解决方案将要求您手动删除字符串,这不是在 C++ 中完成的方式。从 std::vector<std::string*> 更改简单地 std::vector<std::string>将解决这个问题,并避免您将来头疼。还有其他不需要的指针可以删除。自 at(i)返回 string&那么我们应该改变pstringstring& .自 dictionnary不是可选的(不能是 nullptr )并且总是指向相同的 vector我们也可以将其更改为 vector<string>& .

void manageDictionnary(vector<string> & dictionnary, char *p) {
for (unsigned int i = 0; i < dictionnary.size(); i++) {
string & pstring = dictionnary.at(i);
if (pstring.compare(p)) {
dictionnary.push_back(p);
}
}
}

这个最新版本可以正常工作,并且更符合 c++ 的资源管理理念。我建议您阅读以下几个主题:

此外,考虑使用 std::set<string> std::unordered_set<string> 为了更方便地表示字典。

以后,请注意访问指针方法的首选方式是ptr->foo()。而不是 (*ptr).foo() .

关于c++ - 如何修复 vector push_back 中的 "no instance of overloaded function"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42401853/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com