错误:未在范围中声明函数

时间:2016-02-29 13:01:40

标签: c++

我有一个名为logs_i的类,其中包含一个名为begin_record的虚拟函数; 我不得不写一个名为counter_logs_t的新类,它应该有一个计算日志的方法。

这是counter_logs_t的接口和实现:

class counter_logs_t : public log_i
{
public:
    counter_logs_t(int counter);
    void print_counter(void);
    void add_counter(void);
    virtual void begin_record(void);

private:
    int counter;
};

counter_logs_t::counter_logs_t(int counter) : log_i()
{
    counter = 0;
}

void counter_logs_t::add_counter(void)
{
    counter++;
}

void logs_t::begin_record(void)
{
    log_i::begin_record();
    add_counter();
}


void counter_logs_t::print_counter(void){
    cout<< counter<< endl;
}

int main()
{

        counter_logs_t  container1();
//some code
        container1.print_counter();

    return 0;
}

当我尝试构建时出现以下错误: 错误:未在范围

中声明'add_counter'

3 个答案:

答案 0 :(得分:1)

此功能的签名不正确,特别是班级名称

void logs_t::begin_record(void)

我认为你的意思是

void counter_logs_t::begin_record(void)

编辑:

你的第二个问题是你在这一行遇到了the most vexing parse

counter_logs_t  container1();

这被解释为声明一个名为container1的函数,该函数不带参数并返回coutner_logs_t。实际上,counter_logs_t没有默认构造函数,唯一的构造函数具有以下签名

counter_logs_t(int counter);

因此,您必须使用counter参数构建它。

counter_logs_t container1{0};
counter_logs_t container1 = counter_logs_t(0);

或制作默认构造函数

counter_logs_t::counter_logs_t() : log_i(), counter(0) {}

然后你可以说

counter_logs_t container1;

答案 1 :(得分:1)

你还有一个问题

counter_logs_t container1();

不是声明变量。它声明了一个名为container1的函数,该函数重新计算counter_logs_t并且不执行任何操作。您需要将其更改为

counter_logs_t container1;

申报变量。

答案 2 :(得分:0)

void logs_t::begin_record(void)
{
    log_i::begin_record();
    add_counter();
}

在这个函数中: 1.“logs_t”应为“counter_logs_t”。 2.我不建议您使用“::”运算符调用类log_i的方法begin_record(),除非您知道它是静态方法。你最好把它称为this->begin_record,因为它是一种虚拟方法。