【问题标题】:"conversion to const char*" error when passing string to function将字符串传递给函数时出现“转换为 const char*”错误
【发布时间】:2014-12-14 01:36:18
【问题描述】:

我尝试将字符串值传递给函数,但 DevC++5.6.1 报告错误(从 char 到 const char* 的转换无效)。这是程序:

#include<iostream>
#include<string>
using namespace std;

string mysubstr(string target, int start_pos, string end_char) {
    for(int i = 0; i < target.size(); ++i)
        if(target[i] == ".") 
            return target.substr(0, i);
    return target;
}

int main() {
    string temp;
    cin >> temp; 
    string day0 = mysubstr(temp, 0, '.');
    return 0;
}

我想知道为什么会发生这种情况以及如何解决它。谢谢你。 顺便说一句:如果将函数头(第5行)更改为

,则会出现相同的错误
string mysubstr(const string &target, int start_pos, string end_char) {

编辑:函数应该如下。对原来的两处修改:(1)调用者应该使用双引号; (2) 相比之下,我应该使用 target.substr(i, 0)。 (3) 现在使用start_pos和end_char这两个参数。

string mysubstr(string target, int start_pos, string end_char) {
    for(int i = 0; i < target.size(); ++i)
        if(target.substr(i, 1) == end_char) 
            return target.substr(0, i);
    return target;
}

【问题讨论】:

    标签: c++ string parameters char constants


    【解决方案1】:

    您正在将字符与字符串 (target[i] == ".") 进行比较,并将字符传递给字符串参数('.' 对应于 end_char)。请注意,您实际上并没有在函数中使用end_char,也没有在这方面使用start_pos

    【讨论】:

      【解决方案2】:

      您将字符 '.' 传递给 const char* 类型的参数。类型不匹配,这是您的问题。您可能想使用字符串文字:

      string day0 = mysubstr(temp, 0, ".");
      //                              ^ ^
      

      【讨论】:

        【解决方案3】:

        函数的最后一个参数是string,但是当你调用它时,你传递给它的是char。您可以通过将该参数放在双引号而不是单引号中来解决该问题,因为char 数组被隐式转换为字符串。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-05-16
          • 1970-01-01
          • 2014-01-09
          • 2021-09-05
          • 2019-04-11
          • 1970-01-01
          • 2020-06-26
          • 1970-01-01
          相关资源
          最近更新 更多