在C++中返回类类型

Returning a class type in C++

本文关键字:类型 返回 C++      更新时间:2023-10-16

很抱歉再次询问,

但我试着克服这个错误已经有一段时间了:

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

我收到一个错误,说时间没有命名类型,我不太确定这个错误,它应该可以工作。

也关于指针

给定我有一个指向指针的双指针和一个指向动态数据的指针。

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

那么删除p,首先删除动态数据,然后删除指针ptr吗?

问题是"时间"是C标准库中的一个函数,请参阅此处。尝试用其他方式命名类。

您需要更正方法声明或定义。

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

对于您的第二个问题

给定我有一个指向指针的双指针和一个指向动态数据的指针。

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

那么delete p会先删除动态数据,然后删除指针ptr吗?

不!您根本不应该删除p,因为它不是使用new创建的。

规则很简单,newdelete成对出现。如果使用new创建某个东西,则应该使用delete销毁它(并且只销毁一次)。

在您的情况下,正确的方法是delete ptr,因为它是使用new创建的。作为一个稍微令人困惑的选项,您可以使用delete *p,因为p指向ptr