1

私の現在のプロジェクトの 1 つでは、ファイルの実際の名前をクラスに送信する必要がありますが、文字列を変数に変換する方法がわかりません。つまり、クラス 内Andrewの変数に変換する必要があります。namePerson

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; 
  };
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; 
  };

nameandのような異なる変数名を使用するmy_nameので、混乱はありません。

于 2013-04-17T18:14:37.163 に答える