繁体   English   中英

C ++:vector &lt;设置 <string> &gt;按功能初始化

[英]C++: vector< set<string> > initialization by function

在C ++中,我想通过以下方式初始化一组字符串向量:

string border(getBorder());
vector<string> W(_h_,border+"_"+border);
vector< set<string> > W_f(_h_,getNgrams(&W[0]));

哪里:

set<string> getNgrams(string word){ ... }

和:

string getBorder(){ ... }

错误消息显示为:

conversion from 'std::basic_string<char, std::char_traits<char>, std::allocator<char> >*' to non-scalar type 'std::string' requested

您尝试在此处将std::string*分配给std::string

vector< set<string> > W_f(_h_,getNgrams(&W[0]));

&W[0]std::string* ,但getNgrams期望使用std::string

set<string> getNgrams(string word){ ... }

您的getNgrams函数需要一个string但是您要在此处传递一个string*

vector<string> W(_h_,border+"_"+border);
vector< set<string> > W_f(_h_,getNgrams(&W[0])); // look at the argument being passed.

wvector<string>w[0]因此是一个string ,并且您要传递&w[0]这是一个string*

在这行上:

vector< set<string> > W_f(_h_,getNgrams(&W[0]));

您可以使用&运算符获得W[0]的地址。 W[0]的类型为std::string ,地址的类型为std :: string *(或更具体地,您在错误消息中看到的内容)。 然后,您将该指针传递给函数getNgrams ,该函数需要一个字符串而不是一个指针。

只需删除&运算符即可修复。 但是,您可能希望使用const引用来避免复制字符串:

set<string> getNgrams(const string& word)

W[0]产生std::string ,因此&W[0]是指向string的指针,而您有getNgrams(std::string)而不是getNgrams(std::string*) ,因此编译器抱怨从std::string*std::string

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM