C++ c++;字符串,通过引用传递会从编译器生成错误 void gp(向量和res、字符串str、int l、int r、int n){ 如果(l==n){ 字符串右=字符串(n-r’); str+=右; res.推回(str); 返回; } gp(res,str+'(',l+1,r,n); 如果(l>r){ gp(res,str+'),l,r+1,n); } } 向量生成器属性(int n){ 向量res; gp(res,“”,0,0,n); 返回res; }

C++ c++;字符串,通过引用传递会从编译器生成错误 void gp(向量和res、字符串str、int l、int r、int n){ 如果(l==n){ 字符串右=字符串(n-r’); str+=右; res.推回(str); 返回; } gp(res,str+'(',l+1,r,n); 如果(l>r){ gp(res,str+'),l,r+1,n); } } 向量生成器属性(int n){ 向量res; gp(res,“”,0,0,n); 返回res; },c++,C++,对于此代码 如果我把第一行改成 void gp(vector<string>& res, string str, int l, int r, int n){ if(l == n) { string right = string( n-r, ')'); str += right; res.push_back(str); return; } gp(res, str+'(', l+1, r,n)

对于此代码 如果我把第一行改成

void gp(vector<string>& res, string str, int l, int r, int n){
    if(l == n) {
        string right = string( n-r, ')');
        str += right;
        res.push_back(str);
        return;
    }
    gp(res, str+'(', l+1, r,n);
    if (l > r) {
        gp(res, str+')', l, r+1,n);
    }

}

vector<string> generateParenthesis(int n) {
    vector<string> res;
    gp(res, "", 0, 0, n);
    return res;

}
void gp(向量和res、字符串和str、int l、int r、int n){
没有用于调用的匹配函数 '解决方案::gp(标准::向量>&, std::basic_string,int,int&,int&)'

我的问题是,为什么我不能通过引用传递这个std::字符串


谢谢!

您的字符串实际上是一个
常量字符*
,调用函数时,您正在从该
常量字符*
构造一个右值字符串,但您的函数需要一个左值,因为引用不是常量。这将起作用:

 void gp(vector<string>& res, string& str, int l, int r, int n){
string mystring("");
gp(res, mystring, 0, 0, n);