字符串的类型转换
type casting of strings
我正在尝试这段简单的代码来接受一个函数中的字符串并将其传递给另一个函数
#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
,并且不能修改std::string
和字符串文本(双引号内的字符串(。
由于你的函数不会改变deviceName
,所以让你的参数成为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);
但是,如果您确实有理由传递char*
并且不打算修改参数,则可以这样调用它:
string name;
...
set_name(&name[0]);
相关文章:
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 如何将字符串类型转换为 ostringstream
- 如何将两个 jlong 数据类型转换为 jstring,然后将两个字符串连接在一起以便从 JNI 将字符串返回给 jav
- 将函数指针类型转换为相应的字符串
- 将任何类型的类型转换为字符串 c++
- 如何将模板类型转换为字符串(如果它也可以是字符串)
- 字符串常量之前的预期构造函数、析构函数或类型转换
- C++大小写中的类型转换常量字符串
- 使用java jni时转换字符串类型
- 字符串的类型转换
- 字符串流与C++中的类型转换
- 如何在visualc++中将WORD类型转换为字符串
- 为什么在运行时将字符串类型转换为DWORD时会得到不同的值?
- QVariant中的自定义类型转换为空字符串
- std::字符串的类型转换
- C++ 隐式类型转换字符串 -> int?
- (字符串)字符类型转换
- 如何在VS2012中转换自定义类型为字符串
- 你认为是什么让这个C++代码变慢了?(它循环通过ADODB记录集,将COM类型转换为字符串,并填充ostringstre