2016-04-16 44 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) 
{ 
    struct invoice.date = nDate; 
} 

你应该是这样的:

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

    ++lines; 
} 

lines是一个新的私有数据成员被添加用于计数发票的记录。

更好

的是,你可以使用一个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

谢谢! 吸气剂我应该只使用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