C++ “如何修复”;没有重载函数的实例“;矢量推回?

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

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

我的代码:

#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);
        }
    }
}