将字符串传递给函数时“转换为const char *”错误

时间:2014-12-14 01:36:19

标签: c++ string parameters char const

我试图将字符串值传递给函数,但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;
}

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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