我正在尝试这段简单的代码,以在一个函数中接受字符串并将其传递给其他函数
#include <iostream>
#include <string>
using namespace std;
void set_name(char *deviceName)
{
cout<<"Local Device name is:"<<endl;
cout<<deviceName<<endl;
}
void enter_name()
{
cout<<"Enter a user friendly name"<<endl;
string name;
getline(cin, name);
cout << "Entered name is:"<<endl;
cout << name<<endl;
set_name(name);
}
int main()
{
enter_name();
return 0;
}
但是当我编译这段代码时,出现以下错误:
error C2664: 'set_name' : cannot convert parameter 1 from 'std::string' to 'char *'
请有人帮我解决此错误,确保我不想更改set_name()的原型;
您的函数set_name
正在使用char*
参数,而您正在尝试传递std::string
。如果您的函数参数是const char*
,它将为您隐式转换:
void set_name(const char* name);
std::string name = "MyName";
set_name(name);
但是,您告诉编译器char*
允许对此进行修改,因为它不是const
,并且不能修改astd::string
和string文字(双引号内的字符串)。
由于您的函数不变deviceName
,因此将参数设为a是最合理的const char*
; 但是,将其变成std::string
!更为有意义。
void set_name(const std::string& deviceName)
{
cout<<"Local Device name is:"<<endl;
cout<<deviceName<<endl;
}
可以这样称呼:
// string literal
set_name("MyDeviceName");
const std::string device = "MyDeviceName";
// string
set_name(device);
// char*
char* device = "MyDeviceName"
set_name(device);
但是,如果您确实有理由传递achar*
且不打算修改参数,则可以这样调用它:
string name;
...
set_name(&name[0]);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句