2011-11-10 24 views
0

配列を含むコンストラクタを持つクラスがあり、この配列の各メンバをこのクラスの関数に渡して追加するにはどうすればよいですか?C++コンストラクタから関数への配列の受け渡し

コンストラクタの実装

person::person 
{ 
    double NoPerson[150]; //no of people 
    for(int j=0;j<=150;j++) 
    { 
    NoPerson[j]=1.00;//has to set to 1 pound 
    } 

    double person::aveWage(double NoPerson[]) 
    { 
    double total; 
    double NoPerson[150]; 

    using namespace std; 

    for(int i=0;i<=150 ;i++) 
    { 
     total=total+cashCus[i]; 
    } 
    cout<<"total cash for all customers "<<total <<endl; 
} 

は、誰もがこれを達成することができる方法を知っていますか?

+0

まず、ループの中で1つから複数のループを作成します。第二に、 'NoPerson'をクラスのメンバー変数にしてみませんか? –

+0

プログラミングの基本的なルールは「ゼロ、1、多く」です。 "150"のような数字は、基本的にあなたのコードには現れません。 –

+0

@JoachimPileborgには例がありますか? – jis

答えて

1

私はあなたが正しいかどうか分かりませんが、コンストラクタで初期化したいクラス(NoPerson)の配列があり、そのクラスの他の関数から使用したいと思うようです。

その場合クラスの他の関数がそれにアクセスできないので、ローカル変数にしないでください。あなたはそれを関数のようにクラスのメンバー変数にします。

このような何か:

class Person 
{ 
public: 
    Person() 
     { 
      for (int i = 0; i < 150; i++) 
       NoPerson[i] = 1; 
     } 

    double total() 
     { 
      double total; 

      for (int i = 0; i < 150; i++) 
       total += NoPerson[i]; 

      return total; 
     } 

private: 
    // Variables and functions in the 'private' section can only be 
    // referenced by the function in this class. 

    int NoPerson[150]; // This is a member variable 
} 

あなたは上記の例でわかるように、変数NoPerson機能クラスずに定義されています。これにより、クラス内のすべての関数にアクセスできるようになります。

+0

しかし、他のクラスにこの変数へのアクセスを許可したい場合はどうすればいいですか? – jis

+0

次に、その変数をグローバルにする必要があります。ヘッダーファイル( 'extern int NoPerson [];')に宣言を追加し、変数が必要な場所にそのヘッダーをインクルードします。一つのソースファイルで、変数( 'int NoPerson [150];')を定義します。 –

0

コードが壊れています。実際には、コード内に 'NoPerson'という3つの異なる配列があります。一つはコンストラクタのローカル、aveWageの引数はaveWageの中にローカルで宣言されたNoPerson配列です。さらに、何も配列を使用していないため、コンストラクタを終了するときにコンストラクタの配列が削除されます。 aveWageの引数としてNoPerson配列を使ってコンストラクタからaveWageを呼び出す場合は、これを行うことができますが、aveWageのローカル宣言はそれをマスクします。

+0

ありがとうございました、あなたは非常に役に立ちました。 – jis

2

本当に配列でなければなりませんか?そうであれば、それに沿ってサイズを渡す必要があります。 int add(int[] items, int size)。このチュートリアルでは、配列の基本について説明します。http://www.cplusplus.com/doc/tutorial/arrays/

しかし、配列は「プレーンなC」のものです。 C++を使用している場合、ほとんどの場合、vectorを使用する方がよいでしょう。

0

1)配列の境界が間違っています(< 150)。

2)C++ 98/03では、メンバ配列を初期化できません。 C++ 11では、ゼロ以外の150個の値を初期化するのは面倒ですが、person::person() : NoPerson{1., 1., 1.} { }(実際には150個)です。 (それはしかし、この問題は、適切な設計のリビジョンを生き残るとは考えにくいです。)

3)aveWageループはstd::accumulate(例えばstd::cout << "total = " << std::accumulate(cashCus, cashCus + 150, 0) << std::endl;で書くことができます。あなたはtotalを初期化することはありませんので、現在お使いのコードが壊れている。

関連する問題