C++ “如何修复”;没有重载函数的实例“;矢量推回?
我想写一个函数,它把指向向量指针的指针作为输入,向量指针指向字符串(字典),指针指向字符(p)。函数将检查char是否在字典中,如果不在字典中,则将p添加到向量字典中 我的代码:C++ “如何修复”;没有重载函数的实例“;矢量推回?,c++,c++11,visual-c++,C++,C++11,Visual C++,我想写一个函数,它把指向向量指针的指针作为输入,向量指针指向字符串(字典),指针指向字符(p)。函数将检查char是否在字典中,如果不在字典中,则将p添加到向量字典中 我的代码: #include <iostream> #include <string> #include <vector> using std::string; using std::vector; std::vector<string *> dictionary; void m
#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);
}
}
}
#包括
#包括
#包括
使用std::string;
使用std::vector;
向量字典;
void manageDictionary(vector*dictionary,char*p){
for(无符号整数i=0;i<(*字典).size();i++){
字符串*pstring=(*dictionary).at(i);
if((*pstring).比较(p)){
(*字典)。向后推(p);
}
}
}
但是,VisualStudio编译器显示,就在push_-back方法(
)之前的if语句中有一个错误。当我将鼠标悬停在错误上时,它会显示“没有重载函数的实例”
我添加了
std::vector字典
在开始时,仍然无法找出问题所在。dictionnary
是std::string*
的向量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++的资源管理理念。我建议您阅读以下几个主题:
- 标准算法,如
- 李>
另外,考虑使用或更方便地表示一个字典组。
今后,请注意,访问指针方法的首选方法是
ptr->foo()
,而不是(*ptr).foo()
您希望编译器如何将char*
(什么是p
)转换为字符串*
(向量包含的内容)?您很可能不需要指针向量,或者,你需要通过指针把向量传递给函数。乍看起来,C++代码中有太多指针。<代码> STD::SET/CODE >可能有用。如果你写了代码> P> Fo< <代码>,而不是<代码>(*P),这将更容易阅读。
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);
}
}
}