键入字符串

时间:2016-02-16 05:39:18

标签: c++ string

我正在尝试这段简单的代码来接受一个函数中的字符串并将其传递给其他函数

#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()的原型;

1 个答案:

答案 0 :(得分:1)

您的功能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]);