C ++将字符串存储到类中

时间:2017-12-08 04:17:14

标签: c++ visual-studio

我之前提到了一个关于结构的话题。而且我知道类与结构具有相同的概念。我如何将字符串存储到类中?

这是班级

class studentType
{
public:
    void setData(string, int);
    string getName() const;
    int getId() const;
private:
    string name;
    int sid;
};

void studentType::setData(string, int) {
    name = ??;
    sid = ??;
}

string studentType::getName() const {
    return name;
}

int studentType::getId() const {
    return sid;
}

主要包括:

int main() {

    studentType object, number;

    cout << "enter name and code of item1: ";
    cin >> object.setData() >> object.setData();
    cout << "enter name and code for item2: ";
    cin >> number.setData() >> number.setData();

    system("pause");
    return 0;
}

我如何修复cin问题?我已经在标题中定义了字符串。是的,我知道使用命名空间std;不是首选,但为了简单起见

4 个答案:

答案 0 :(得分:1)

int id;
string name;
cout << "enter name and code of item1: ";
cin >> name >> id;
object.setData(name, id);
cout << "enter name and code for item2: ";
cin >> name >> id;
object.setData(name, id);

您应该为您的班级使用构造函数:

class studentType {
public:
    studentType(string name, int sid)
        : name(name)
        , sid(sid)
    { }
// ...

然后,您可以使用正确的名称和ID初始化对象:

cin >> name >> id;
studentType object(name, id);

但我认为构造函数很快就会出现在你正在做的教程或课程中。

答案 1 :(得分:0)

cin >> object.setData() >> object.setData();

>>运算符不会调用object.setData;它需要一个引用并将引用内容设置为提取的输入。表达式object.setData()调用函数,该函数返回void。当然,>>运算符不能采用void参数。此外,funcall中没有足够的参数,因为object.setData需要stringint

你应该这样做:

std::string name;
int num;
cin >> name >> num;
object.setData(name, num);

答案 2 :(得分:0)

您的setData功能可以是这样的:

void studentType::setData(string name, int sid) {
    this->name = name;
    this->sid = sid;
}

在您的main()

首先cin值,然后调用setData函数,即

int main(){
    string name;
    int code;

    studentType object, number;
    cout << "enter name and code of item1: ";
    cin >> name >> code;

    object = studentType();
    object.setData(name, code);

    // your remaining code

}

请注意: 如果您使用cin获取名称和代码,则名称只能是一个单词。假设您正在写两个单词的名称,第一个单词将被放入名称,第二个单词将被尝试放入代码。

简单来说,cin是以空格分隔的。

答案 3 :(得分:0)

您正在寻找的是std::getline()。我会使用cin来获取整数,但不能使用字符串。我会像这样分开用户输入。就像@Suhaib Ahmad所说,cin是以空格分隔的。要获取包含stdin空格的字符串,请使用std::getline()

void studentType::setData(string n, int i) {
    this->name = n;
    this->sid = i;
}

-

int main(void) {
    string n;
    int i;
    studentType object, number;

    cout << "Enter name for item1: ";
    getline(cin, n);
    cout << "Enter code for item1: ";
    cin >> i;

    object = studentType(); // make sure you construct your studentType, I also recommend using a constructor function
    object.setData(n, i);

    cout << "Enter name for item2: ";
    getline(cin, n);
    cout << "Enter code for item2: ";
    cin >> i;
    number = studentType();
    number.setData(n, i);

    system("pause");
    return 0;
}

使用setData()的方式,没有给出参数,作为存储cin输入的位置是不正确的。您需要先声明变量,然后使用变量初始化类。