#include <iostream>
using namespace std; 
class Counter
{
protected:
unsigned int count;
public:
    Counter ():count ()
  { }
    Counter (int c):count (c)
  { }
  unsigned int get_count () const
  { return count;}
  Counter operator ++ ()
  {return Counter (++count);}
  };

  class CountDn:public Counter
  {
  public:CountDn ():Counter (){ }
  CountDn (int c):Counter (c){ }
  CountDn operator -- ()
  {return CountDn (--count);}
  };

  int main ()
  {
    CountDn c1;
    CountDn c2 (100);
    cout << "\nc1=" << c1.get_count ();
    cout << "\nc2=" << c2.get_count ();
    ++c1;
    ++c1;
    ++c1;
    cout << "\nc1=" << c1.get_count ();
    --c2;
    --c2;
    cout << "\n c2=" << c2.get_count ();
    CountDn c3 = ++c2;
    cout << "\n c3=" << c3.get_count ();
    cout << endl;
    return 0;
}

使用重载的“ ++”运算符时出现错误,而使用“-”则可以正常工作。

错误消息是

37:14: error: conversion from ‘Counter’ to non-scalar type ‘CountDn’ requested
 CountDn c3 = ++c2;

为什么会出现此错误? 此错误是什么意思,我该如何解决?

#1楼 票数:0

使用重载的“ ++”运算符时出现错误,而使用“-”则可以正常工作。

您可以在CountDn类中实现-而不是++的运算符重载实现

您必须在CountDn类中缺少++的运算符重载

CountDn operator ++ ()
{return CountDn (++count);}

修改后

#include <iostream>
using namespace std;
class Counter
{
protected:
    unsigned int count;
public:
    Counter ():count ()
    { }
    Counter (int c):count (c)
    { }
    unsigned int get_count () const
    { return count;}
    Counter operator ++ ()
    {return Counter (++count);}

};

class CountDn:public Counter
{
public:CountDn ():Counter (){ }
    CountDn (int c):Counter (c){ }
    CountDn operator -- ()
    {return CountDn (--count);}
    CountDn operator ++ ()
    {return CountDn (++count);}
};

int main ()
{
    CountDn c1;
    CountDn c2 (100);
    cout << "\nc1=" << c1.get_count ();
    cout << "\nc2=" << c2.get_count ();
    ++c1;
    ++c1;
    ++c1;
    cout << "\nc1=" << c1.get_count ();
    --c2;
    --c2;
    cout << "\n c2=" << c2.get_count ();
    CountDn c3 = ++c2;
    cout << "\n c3=" << c3.get_count ();
    cout << endl;
    return 0;
}

产量

c1=0
c2=100
c1=3
 c2=98
 c3=99
Program ended with exit code: 0

#2楼 票数:0

的结果

Counter operator ++ ()
    {return Counter (++count);}

属于Counter类型,并且没有从CounterCountDn转换。 以下行可以编译:

Counter c3 = ++c2;

  ask by Tezuesh Varshney translate from so

未解决问题?本站智能推荐:

5回复

请求的非标量类型

有人可以帮我一个错误吗 我有A类并从B类派生,但是这些行有问题: 预先感谢您的任何帮助 已编辑 我有以下代码((无法更改)): 我试图为B创建构造函数: 但这给我一个错误,真的需要专业人士的帮助
1回复

在默认构造函数中可见的继承类的 c++ 计数器的实现

所以我尝试了多种方法来为我的类创建一个计数器,该计数器在构造函数中传递数字 我希望它输出这样的东西: 我在哪里得到这个: 注意用户提示输入从new运算符调用的构造函数调用的值之间的区别 ofc 需要给他们单独的名字,这也是我想解决的问题。 你可能提出的任何建议都是可以接受的。 主要目标是
1回复

通用对象计数器的发展

我一直在开发一个类,它将使我能够分别计算我将拥有的任何类的对象。 该类应满足以下要求:完全满足要求(我无需对要计数的任何类的对象进行更改) 下面是我现在所拥有的宣言,也是我的目标: 我们具有类的层次结构: 我可以通过以下方式使用“可计数”类: 但是有一个问题:可以
1回复

可能的指针错误无法从类型1转换为类型2

在main的最后一行,当我尝试在my_q上执行树构建器时。 我收到错误消息“无法将参数1从piriority_queue Node *转换为Priority_queue Node,但是我不明白什么是节点,因为一切都是Node *。我已简化了代码,仅包含1个Node *对象以便于查看。
3回复

在C ++中,为什么转换为派生类型的引用有效?

确切地说,为什么B b = (B&) a编译和工作而B b = (B) a不在下面的程序中? 是否有关于转换为派生类型的内容,我在这里缺少参考? 如果我只是转换为B,它会给出编译时错误,构造函数B(A a)不存在。
1回复

QObject基类的C ++类型转换为继承的对象

我有类A(..):QObject(..)和B(..):A(..)并创建一个对象A,以后应该转换/扩展到类型B: 原因是我在创建基础对象时还不知道最终类型。 我希望能够使用更精细的类型扩展此对象,然后可以访问基础对象成员。 我理解C ++支持类型转换,但我的代码导致错误,因为它调用
2回复

C ++强制转换为派生指针或设计错误

我有一个关于多态的问题 使用d-> g()将会出现段错误。 转换后是否可以在派生对象中访问u? 该程序的目的是构造一个具有未知类型的类(有关该信息的信息只有在构造了类对象之后才可用,例如,用于读取jpg文件的类,深度信息事先未知)。 还是有针对此类问题的设计模式? 感谢您的
4回复

C++ 继承方法但返回类型错误(自动转换?typeid(*this) ?)

我有一个带有返回类对象的方法的 BaseClass,我有一个 DerivedClass。 现在,当我有一个 DerivedClass 对象并调用 BaseClass 中定义的方法时,返回值是 ob 类型 BaseClass,不幸的是不是 DerivedClass 类型。 所以我希望实现的是使用超