我试图将字符串值传递给函数,但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;
}
答案 0 :(得分:2)
您正在将字符与字符串(target[i] == "."
)进行比较,并将字符传递给字符串参数('.'
为end_char
)。请注意,您实际上并没有在您的函数中使用 end_char
,也没有start_pos
。
答案 1 :(得分:1)
您将字符'.'
传递给const char*
类型的参数。类型不匹配哪个是你的问题。您可能想要使用字符串文字:
string day0 = mysubstr(temp, 0, ".");
// ^ ^
答案 2 :(得分:1)
您的函数的最后一个参数是string
,但是当您调用它时,您将传递char
。您可以通过将该参数放在双引号而不是单引号来解决问题,因为char
数组会隐式转换为字符串。