c代码第43行中“counter::counter”的使用无效

invalid use of ‘counter::counter’ in c code at line 43

本文关键字:counter 无效 代码 43行中      更新时间:2023-10-16

我在以下代码中出错无效使用"counter::counter"

这是我的代码:

#include<iostream>
using namespace std;
class counter   
{
protected:
    int value;
public:
    counter ()
    {
        value=0;
    }
    counter (int val)
    {
        value=val;
    }
    int GetCounter()
    {
        return value;
    }
    counter up()
    {
        value=value+1;
    }
};
class NewCounter : public counter   
{
public:
    NewCounter():counter()
    {}
    NewCounter(int val):counter(int val)
    {}
    void Down()
    {
        value=value-1;
    }
};
int main(void)
{
    NewCounter con1;
    NewCounter con2;
    con2.counter(1);
    cout<<"Counetr Initially"<<con1.GetCounter()<<endl;
    cout<<"Counter initially"<<con2.GetCounter()<<endl;
    con1.up();
    con2.up();
    cout<<"Counter 1 on incrrr---"<<con1.GetCounter()<<endl;
    cout<<"Counter  2 on incrrr---"<<con2.GetCounter()<<endl;
    con1.Down();
    con2.Down();
    cout<<"count 1 on down"<<con1.GetCounter()<<endl;
    cout<<"count 2 on down"<<con2.GetCounter()<<endl;
    return 0;
}

在我看来,您正试图实例化一个NewCounter对象,并将其数据成员设置为

NewCounter con2;
con2.counter(1);

第二行是非法的,counter是一个不能像成员函数那样调用的构造函数。但你却这样做:

NewCounter con2(1);

如果你修复了NewCounter构造函数:,这将起作用

NewCounter(int val):counter(val) {}

在第行:

con2.counter(1);

您正在调用子对象counter的构造函数。这既愚蠢又违法。相反,您可以调用NewCounter(int)构造函数,int将被传递给counter构造函数:

NewCounter con2(1);
NewCounter con2;
con2.counter(1);

否;counter不是一个可以调用的函数!

一次性传递构造函数参数:

NewCounter con2(1);