2017-11-14 6 views
1

これは経験には明白なことかもしれませんが、C++プログラミングのための私の最初の本当のクラスの真中にあります。私は私のコードの中で、何の成功もなしに解決しようとしている何かを見つけました。これらのクラスモジュールの内部にある配列内に格納されている "m_cost"の合計値の合計を抽出しようとしています。 switch文の中に合計値を出力して印刷したいと思います。誰かが私を正しい方向に向けることができるかどうか、あるいは私が完全にオフ・トラックになったかどうかを見ているだけです。クラスモジュールからの情報を取得してスイッチ文中に出力する際の問題

問題のプロジェクトコードセクション:

void materialsMenu() 
{ 
    Inventory record[MAX_REC]; 
    int i, n; 

    cout << "\n=====Inventory Management=====\n"; 
    cout << "\nHow many Materials are there to be used? : "; 
    cin >> n; 

    cout << "Enter " << n << " Materials\n"; 
    for (i = 0; i < n; i++) 
    record[i].getdata(); 

    cout << "\n\n---Material Information---\n"; 
    cout << "\n" << setw(8) << "Item Name " 
     << setw(10) << " Price per foot " 
     << setw(19) << " Cost " << endl; 
    cout << endl << "-------------------------------------------" << endl; 

    for (i = 0; i < n; i++) 
    record[i].showdata(); 
} 

void Inventory::getdata() { 
    cout << endl; 
    cout << "\nEnter Material Name : "; 
    cin >> itemName; 
    cout << "Enter Price Per Foot : "; 
    cin >> ppf; 
    cout << "Enter Total Length Needed in Feet (ft) : "; 
    cin >> length; 
    cout << endl; 

    m_cost = ppf*length; 
    m_costT=???????? **this is the issue** 
} 

Materials.Hファイルの内容:

#ifndef MATERIALS_H 

using namespace std; 

class Materials { 
private: 
char itemName[15]; 
float ppf; 
float length; 
double m_cost; 
float m_costT; 


public: 
Materials() 
{ 
    ppf = 0; 
    length = 0; 
    m_cost = 0; 
    m_costT = 0; 


} 
Materials(int itemName, float ppf, float length, double m_cost, float 
m_costT) 
{ 
    length = getLength(); 
    ppf = getPpf(); 
    m_cost = getCost(); 
    m_costT = getTotal(); 

} 

float getLength() 
{ 
    return length; 
} 
float getPpf() 
{ 
    return ppf; 
} 
double getCost() 
{ 
    return m_cost; 
} 
float getTotal() 
{ 
    return m_costT; 
} 
void getdata(); 
void showdata(); 

}; 
#endif // !MATERIALS_H 
+1

本当にあなたの問題を示すために必要のない無関係なコードはありますか? – user0042

+0

問題がどこにあるのか分かりませんでした。すべてを範囲に入れようとしています。 – tex84cl

+0

デバッガ。デバッガを使用します。デバッガを使用すると、コードを一歩一歩進んだり、変数や実行フローの値を見たりすることができます。しばしば、デバッガを使用する方が、StackOverflowに正しくポスティングし、誰かがあなたのコードを検査したり、デバッグするのを待つよりも速いです。デバッグセッションの結果であなたの投稿を編集してください。 –

答えて

0

は、あなたの記録を保持するために、このような何かを考えてみましょう。それは非常に単純ですが、別のクラスを保持するクラスのアイデアを示し、情報隠れやその他のさまざまな情報を表示します。 Recordクラスがこれに気を付けるべきではないので、あなたはその合計を得るのに苦労しています。合計は、レコードの範囲外の概念です。そして、あなたがそれをやりたい場所からこれを計算することは非常に困難です。 (それは可能ですが、それはC++のルールのすべての種類を破壊し、避けるべきである)

例:

class Record; 

class RecordHolder 
{ 
public: 
    int GetTotal() 
    { 
     int retVal = 0; 
     for(int i=0; i<10; i++) // Magic number 10 for demo purposes only... 
     { 
      retVal += records[i].m_cost; // Or use a public get function. 
     } 
     return retVal; 
    } 

private: 
    Record records[10]; // Magic number 10 for demo purposes only... 
}; 

はRecordHolderもレコードを削除/印刷を行う追加することができ、などこれは、レコードの配列を制御。レコードは単なるレコードであり、そのような管理は気にしません。

+0

ありがとうございました。この時点でクラス型のデータ構造を練習することで噛み砕くことができない場合や、単に「for」と配列内の個々の項目の配列ステートメントで削除して再作成する必要がある場合は、 switch文のサブ構造。 – tex84cl

+0

私はあなたにここにあなたが与えたことを考えていません。それはC++スタイルのデータ編成です。将来的に、自分のデータがあなたの望む通りに利用できない問題にぶつかるときには、一歩前倒しして、データを整理するためのよりよい方法があるかどうかを見てください。適切な方法でデータを整理することで、コーディングが非常に簡単になり、メンテナンスが容易になります。 –

関連する問題