【问题标题】:Cannot convert from '_int64' to 'Data *'无法从“_int64”转换为“数据 *”
【发布时间】:2016-11-10 07:07:24
【问题描述】:

在我的项目中,我有一个类来处理时间,它是这样声明的:

class Data {
    int dia;
    int mes;
    int ano;
    int hora;
    int minuto;

    public:
       Data();
       Data(int, int, int, int, int);
       Data(const Data &);
       void mostraData();
       void ImprimeData();
       Data operator-(const Data &aux);
};

dia = 日,mes = 月,ano = 年,hora = 小时....(葡萄牙语)

在某些时候,我必须计算两个不同时间之间的差异。所以我做了这个简单的运算符 -:

Data Data::operator-(const Data & aux){
    Data temp(0, 0, 0, 0, 0);
    temp.dia = this->dia - aux.dia;
    temp.mes = this->mes - aux.mes;
    temp.ano = this->ano - aux.ano;
    temp.hora = this->hora - aux.hora;
    temp.minuto = this->minuto - aux.minuto;
    return temp;
}

现在,我只是在测试它是否计算正确的时间,我写了这段代码:

aux = new Data;
Data *teste = new Data(7, 7, 2016, 22, 41);
Data * resultado = teste - aux;
resultado->ImprimeData();

附言。函数“ImprimeData()”用于打印结果。 但是在第三行它给了我一个错误。首先它说不能使用tipo 'long long' 的值来初始化'Data *' 类型的实体,然后它说不能从_int64 转换为Data *。

【问题讨论】:

  • 你为什么期望数据类型转换应该没问题?
  • Data * resultado = teste - aux; 行中有几个问题。减法运算符不期望任一操作数是指针,也不返回指针。
  • 停止。如果auxteste 是指针,为什么这段代码不能编译?这是一个正确的语法(不是语义)。 aux 是什么?
  • @ilotXXI,这是因为他正在减去两个指针并试图将 (int64) 值分配给没有强制转换的指针。然而,这是一个红鲱鱼,因为他实际上想要做的是调用他的operator- 过载。为此,他需要在下面使用我的答案。
  • @ilotXXI。错误的。 Pointer - Pointer = int

标签: c++ class time struct converter


【解决方案1】:

这一行

Data * resultado = teste - aux;

应该是

Data resultado = *teste - *aux;

第一个是减去两个指针值。第二个是调用你的operator - 重载。

你也应该改变

resultado->ImprimeData();

resultado.ImprimeData();

【讨论】:

  • 如果我这样做,它会在“*teste”中的第一个指针上出现错误,表示无法从“数据”转换为“数据 *”
  • @CésarPereira,因为您还需要从 Data * resultado 中删除 *
  • 完成了这项工作。但后来我在尝试打印结果时间时遇到错误。在“resultado->ImprimeData()”行中,我得到一个“表达式必须具有指针类型”。那是指“结果”
  • @CésarPereira,当然,只需将该行上的-> 更改为.,就像我上面的编辑所示。
  • @ilotXXI,没必要侮辱。只是帮助noobie。他会明白的。
【解决方案2】:

你的睾丸是一个指针,你的辅助也是。

这有点不对劲,因为我的睾丸更像是一个容器和/或工厂。

【讨论】:

    猜你喜欢
    • 2016-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-05
    • 2021-11-19
    • 1970-01-01
    • 1970-01-01
    • 2010-12-24
    相关资源
    最近更新 更多