错误:无法将 'std::string' {aka 'std::__cxx11::basic_string<char>'} 转换为 'std::string*' {aka 'std::__cxx11::basic_string<char>*'}

问题描述 投票:0回答:1
#include <iostream>
#include <string>
using namespace std;

string change(string a[10]){
    string b;
    for(int i = 0; i < 10; i++){
        b[i] = a[i] + 1;
    }
    return b;
}

int main() {
    string a = "hello";
    cout << change(a);
    return 0;
}

我在代码中找不到任何错误。 我该如何使用定长字符串作为函数的输入?

b[i] = a[i] + 1;
错误:无法在赋值中将 'std::string' {aka 'std::__cxx11::basic_string'} 转换为 '__gnu_cxx::__alloc_traitsstd::allocator::value_type' {aka 'char'}

cout << change(a);
错误:无法将 'std::string' {aka 'std::__cxx11::basic_string'} 转换为 'std::string*' {aka 'std::__cxx11::basic_string*'}

c++ string
1个回答
0
投票

这个

 string change(string a[10])

很奇特/令人困惑/有历史动机/无论你怎么称呼它的写作方式

string change(string* a)

您的函数采用指向

std::string
的指针作为参数。数组大小只是装饰性的。任何大小的数组都可以传递给该函数,它将衰减为指向其第一个元素的指针。这是将 c 样式数组传递给函数的一种方法。这不是将数组传递给函数的首选方法(您可以使用例如
std::array
代替)。

此外,您的代码中没有“固定长度”字符串。

std::string
具有动态大小。对于固定长度的字符串,您可以使用
std::array<char,10>
(尽管这不适合
"Hello"
,它只有 6 个字符,5 + 终止符)。

要产生预期的输出,您的函数可以是这样的:

std::string change(std::string a){
    // no need to make another copy
    for(auto& c : a){   // use range based for loop when possible
        a[i] += 1;
    }
    return a;
}
© www.soinside.com 2019 - 2024. All rights reserved.