2016-04-16 13 views
0

私はクラスクラス.. C++

class piet3 : public Pieteikums 
{ 
public: 
piet3(); 
virtual ~piet3(); 
void set_invoice(string nDate, float nPrice); 

protected: 

private: 
struct invoice 
{ 
    string date; 
    float price; 
}; 
invoice arr[30]; 

}; 

私のcpp持っている:基本的にやろうとしているイムが何であるかを

#include <iostream> 

#include "piet3.h" 

using namespace std; 

piet3::piet3() 
{ 

} 

piet3::~piet3() 
{ 

} 

void piet3::set_invoice(string nDate, float nPrice) 
{ 
struct invoice.date = nDate; 
} 

を。私は彼らが費やした価格とそれが起こった日付のユーザー入力を取得し、それを構造体として配列に入れたいと思っています。

arr [0] = struct1、arr [1] = struct2と似ています。

私は問題が請求書であることを知っていますが、私はそれを理解できません。

メイン:

//everything before is declared 
piet3 object; 
cin >> date; 
cin >> price; 
object.set_invoice (date,price); 
+0

'piet3 object;' piet3を使用するには、オブジェクトが必要です。なぜあなたはオブジェクトなしで 'invoice'を使うのが大丈夫だと思いますか? – deviantfan

+0

私はpiet3 * object = new piet3();と一緒に行かなければなりません。 ? – osiic21

答えて

3

主な問題は、(無効な構文)はこちら:

void piet3::set_invoice(string nDate, float nPrice) 
{ 
    arr[lines].date = nDate; 
    arr[lines].price = nPrice; 

    ++lines; 
} 

linesが新しいプライベートデータメンバである:

void piet3::set_invoice(string nDate, float nPrice) 
{ 
    struct invoice.date = nDate; 
} 

はあなたのようなものを持っている必要があります請求書の記録をカウントするために追加されます。

いっそのこと、あなたの代わりに、生の配列のvectorを使用することができます。

#include <vector> 
// ... 
private: 
    struct invoice 
    { 
    string date; 
    float price; 
    }; 

    vector<invoice> arr; 
}; // class piet3 

あなたは持っているが、linesデータメンバを追加しないと、あなたが請求書の30記録の制限はありません。

void piet3::set_invoice(string nDate, float nPrice) 
{ 
    arr.push_back({nDate, nPrice}); 
} 

また、実際のソフトウェアの場合、float/doubleは、重大な会計上の問題を引き起こす可能性があると考えてください。

+0

ありがとう! getter用の 私はちょうどvector.atを使うべきですか? – osiic21

+1

@ osiic21 ['vector :: at'](http://en.cppreference.com/w/cpp/container/vector/at)または[' vector :: operator [] '](http:// en。 cppreference.com/w/cpp/container/vector/operator_at)。通常、あなたは "foreach"ステートメントに頼ります:for(auto&record:arr){/ * use/update record * /} ' – manlio