C ++ текущая дата и проблемы с указателями! - PullRequest
2 голосов
/ 22 июня 2010

в с ++ ..

Прежде всего мне нужно сделать конструктор класса 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;
};

в функции

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

компилятор возвращает здесь ошибку assert ( d >= noleggi[j].inizio ) он, кажется, не любит noleggi [j] .inizio как хороший параметр ... (потому что, если я попробую d> = d, это сработает ---> проблема перегрузки оператора, я думаю)

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

есть предложения?

Ответы [ 3 ]

6 голосов
/ 22 июня 2010

Проблема в линии

Data d();

Это интерпретируется как объявление функции (то есть функция с именем d, не принимающая аргументов и возвращающая Data).

Измените его на

Data d;

или, если это структура POD, и вы хотите, чтобы она была инициализирована значением

Data d = Data();

Что касается того, как реализовать конструктор, это будет зависеть от вашей среды; нет стандартной C ++ библиотеки даты / времени. Вероятно, наиболее переносимым способом является использование Boost.Date_Time , как предлагает Дарамарак, но я сам не использовал его, поэтому я не могу сделать больше, чем указать вам на документацию. В системах Posix у вас есть функция time(), которая возвращает количество секунд с определенной даты, и ctime() и связанные функции, чтобы разбить ее на годы, месяцы и т. Д. В Windows, вероятно, есть что-то похожее, но я не не знаю об этом.

3 голосов
/ 22 июня 2010

Я бы предложил использовать повышает библиотеку даты и времени

2 голосов
/ 22 июня 2010

Data d; - это объявление Data объекта с именем d.

Data d(); объявляет функцию d(), которая возвращает Data.

См. C ++ FAQ 10.2 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...