1

我目前的一个项目要求我将文件的实际名称发送到一个类中,但我不知道如何将字符串转换为变量。换句话说,我需要在类中上交Andrew变量。 namePerson

主程序

#include <iostream>
#include <string>
#include "Person.h" 

using namespace std;

int main ()
{
Person p1("Andrew");

}

人.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; 
  };
4

4 回答 4

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成员将首先被构造为一个空字符串,然后分配给。那完全没有意义。如果我们可以立即使用参数给出的值来构造它,那就太好了。事实上,我们可以,用一个成员初始化列表:

Person (string name)
  : name(name)
{ }

这基本上是说“name用参数初始化成员name”。

你也有问题printName。它接受一个字符串参数,然后将其打印出来。您似乎更有可能想要打印出该name成员:

void printName() {cout << name;} 
于 2013-04-17T18:12:54.830 回答
3

初始化成员变量:

Person(string n) : name(n) {}
于 2013-04-17T18:12:02.527 回答
1

在 Person 的构造函数中,执行以下操作:

Person (string name)
{
   this->name = name;
}

或者

您可以使用成员初始化列表:

Person(string name)
: name(name) {}

或者

你可以在构造函数中调用你的函数 setName

于 2013-04-17T18:12:47.057 回答
1

您需要{string name = name;}在构造函数中执行,而不是在集合名称中执行。

所以 :

 class Person 
 {

 public:
    Person (string name) { this->name = name;}

    void printName(string name) {cout << name;} 
 private:
    string name; 
  };

我会使用不同的变量名namemy_name所以没有混淆。

于 2013-04-17T18:14:37.163 回答