【问题标题】:Class with struct in it.. C++带有结构的类.. C++
【发布时间】:2016-04-16 09:32:14
【问题描述】:

我有课

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

【问题讨论】:

  • piet3 object; 要使用 piet3,您需要一个对象。为什么你认为在没有对象的情况下使用invoice 是可以的?
  • 所以我应该选择 piet3* object = new piet3(); ?

标签: c++ struct invoice


【解决方案1】:

主要问题在这里(无效语法):

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 可能会导致严重的会计问题。

【讨论】:

  • 谢谢!对于吸气剂,我应该只使用 vector.at 对吗?
  • @osiic21 vector::at 或 vector::operator[]。通常你会诉诸“foreach”声明:for (auto &amp;record : arr) { /* use / update record */ }
猜你喜欢
  • 1970-01-01
  • 2019-06-03
  • 1970-01-01
  • 2012-11-20
  • 2022-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-19
相关资源
最近更新 更多