[英]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.
w
是vector<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.