c ++当前日期和指针问题!

tri*_*ppy 2 c++ pointers date reference

在c ++ ..

首先,我需要创建类Date d()的构造函数来创建当前日期..我该怎么办?

之后我对这个程序有问题:

class Noleggio
{
 public:
  //Noleggio(unsigned f, unsigned n, unsigned c) : inizio() { film = f; copia = n; cliente = c; restituito = false; }
  bool restituito;
  unsigned addebito;
  //unsigned film, copia, cliente;
  Data inizio;
  Data restituzione;
  CopiaFilm* copia;
  Film* film;
  Cliente* cliente;
};

class VideoNoleggio
{
 public:
  VideoNoleggio (string n) : nome(n) {}
  void InserisciFilm (Film* f);
  void InserisciCliente (Cliente* c);
  void CreaCopiaFilm (string s, Film* f);
  void NoleggioCopia (unsigned n, Film* f, Cliente* c);
  void RestituzioneCopia (unsigned n, Film* f, unsigned t);
  int CercaFilm (Film* f) const;
  int CercaCliente (Cliente* c) const;
  int CercaUltimaCopia(Film* f) const;
  int CercaNoleggio (unsigned n, Film* f) const;
  string Nome() const { return nome; }
  unsigned NumeroFilm() const { return film.size(); }
  unsigned NumeroNoleggi() const { return noleggi.size(); }
  Film* QualeFilm (unsigned i) const { return noleggi[i].film; }
  string QualeTitolo (unsigned i) const { return film[i]->Titolo(); }
 private:
  string nome;

  vector<Noleggio> noleggi;
  vector<CopiaFilm> copie;
  vector<Film*> film;
  vector<Cliente*> clienti;
};
Run Code Online (Sandbox Code Playgroud)

在功能上

void VideoNoleggio::RestituzioneCopia (unsigned n, Film* f, unsigned t)
{
 int i = CercaUltimaCopia(f);
 assert (copie[i].numero >= n  );
 assert ( !(noleggi[i].restituito) );
 Data d();
 int j = CercaNoleggio(n,f);
 assert ( d >= noleggi[j].inizio );
 noleggi[j].restituzione = d;
 noleggi[j].restituito = true;
 noleggi[j].addebito = t*( d - noleggi[j].inizio + 1 );
 // clienti[noleggi[j]->cliente]->Prelievo(noleggi[j]->addebito);
}
Run Code Online (Sandbox Code Playgroud)

编译器在这里返回一个错误 assert ( d >= noleggi[j].inizio ) 似乎不喜欢noleggi [j] .inizio作为一个好的参数...(因为如果我尝试d> = d它的工作原理--->它不是运算符重载问题我猜)

在data.h中 friend bool operator >= (const Data& d1, const Data& d2);

有什么建议吗?

Mik*_*our 6

问题是这条线

Data d();
Run Code Online (Sandbox Code Playgroud)

这被解释为一个函数声明(即一个被调用的函数d,不带参数并返回a Data).

将其更改为

Data d;
Run Code Online (Sandbox Code Playgroud)

或者,如果它是POD结构并且您希望它进行值初始化

Data d = Data();
Run Code Online (Sandbox Code Playgroud)

至于如何实现构造函数,这将取决于您的环境; 没有标准的C++日期/时间库.最便携的方式可能是使用Boost.Date_Time,正如daramarak建议的那样,但我自己并没有使用它,所以我做的不仅仅是指向文档.在Posix系统上,您可以time()返回自定义日期以来的秒数,以及ctime()将其分解为数年,数月等的相关函数.Windows可能有类似的东西,但我不知道.