我当前的一个项目要求我将一个文件的实际名称发送到一个类中,但我无法弄清楚如何将字符串转换为变量。换句话说,我需要将Andrew
转换为name
类中的变量Person
。
的main.c
#include <iostream>
#include <string>
#include "Person.h"
using namespace std;
int main ()
{
Person p1("Andrew");
}
Person.h
#include <iostream>
using namespace std;
class Person
{
public:
Person (string name);
void setName(string name) {string name = name;}
void printName(string name) {cout << name;}
private:
string name;
};
答案 0 :(得分:7)
首先,请注意,您在此处声明setName
的本地变量,并将其分配给自身:
void setName(string name) {string name = name;}
会员name
不受影响。你想要:
void setName(string name) { this->name = name; }
您可以使用构造函数执行相同的操作:
Person (string name) { this->name = name; }
然而,这有一点问题。创建Person
对象时,name
成员将首先构造为空字符串,然后分配给。{1}}成员。这完全没有意义。如果我们可以立即用参数给出的值来构造它,那就太棒了。实际上,我们可以使用成员初始化列表:
Person (string name)
: name(name)
{ }
这基本上是说“使用name
参数初始化name
成员”。
printName
也遇到问题。它需要一个字符串参数然后打印出来。您似乎更有可能打印出name
成员:
void printName() {cout << name;}
答案 1 :(得分:3)
初始化成员变量:
Person(string n) : name(n) {}
答案 2 :(得分:1)
在Person的构造函数中,执行以下操作:
Person (string name)
{
this->name = name;
}
或
您可以使用成员初始化列表:
Person(string name)
: name(name) {}
或
你可以在构造函数中调用你的函数setName
答案 3 :(得分:1)
您需要在构造函数中执行{string name = name;}
,而不是在set name中。
所以:
class Person
{
public:
Person (string name) { this->name = name;}
void printName(string name) {cout << name;}
private:
string name;
};
我会使用不同的变量名称,例如name
和my_name
,因此不存在混淆。