Возврат типа класса в C ++ - PullRequest
       1

Возврат типа класса в C ++

0 голосов
/ 02 февраля 2012

Прошу прощения, что прошу еще раз,

, но какое-то время я пытался обойти эту ошибку:

#include <iostream>
using namespace std;

class time{
   private:
      int m;
      int h;
   public:
      time():m(0),h(0) {};
      time(int x,int y): m(x),h(y) {}
      int getm() const {return this->m;}
      int geth() const {return this->h;}
      void print() const;
      time operator+(time aa);
      time operator-(const time &a) const;
 };

 void time::print() const
 {
    cout <<"Hour: "<<h<<endl<<"Mins: "<<m<<endl;
 }

 time  time::operator+( time &a)
 {
   time temp;
   temp.m= this->m+a.getm();
   temp.h=this->h+a.geth();
   return temp;
 }


 int main ()
 {  
   return 0;
 }

Я получаю сообщение о том, что время не указываеттипа, я не уверен в ошибке, она должна работать.

также относительно указателей

, учитывая, что у меня есть двойной указатель, указывающий на указатель, и этот указатель, указывающий на динамические данные.1010 *

int *ptr=new int
int **p=&ptr;

delete p;

поэтому удалит p, сначала удалит динамические данные, затем указатель ptr?

Ответы [ 3 ]

4 голосов
/ 02 февраля 2012

Проблема в том, что «время» - это функция в стандартной библиотеке C, см. здесь . Попробуйте назвать класс как-нибудь еще.

1 голос
/ 02 февраля 2012

На ваш второй вопрос

Учитывая, что у меня есть двойной указатель, указывающий на указатель, и этот указатель, указывающий на динамические данные.

int *ptr=new int;
int **p=&ptr;

delete p;

Так же будет delete p, сначала удаляются динамические данные, затем указатель ptr?

Нет! И вообще не следует удалять p, так как он не создается с помощью new.

Правило очень простое, new и delete идут парами. Если вы создаете что-то, используя new, вы должны уничтожить это, используя delete (и ровно один раз).

В вашем случае правильным способом будет delete ptr, так как он был создан с использованием new. В качестве немного запутанного варианта вы можете вместо этого использовать delete *p, так как p указывает на ptr.

1 голос
/ 02 февраля 2012

Вам необходимо исправить объявление или определение метода.

                            |----- Remove reference operator
                            V
time  time::operator+( time &a)
 {
   time temp;
   temp.m= this->m+a.getm();
   temp.h=this->h+a.geth();
   return temp;
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...