2016-02-29 43 views
0

我有一个名为logs_i的类,其名为begin_record; 我不得不写一个名为counter_logs_t的新类,它应该有一个记录日志的方法。错误:函数未在范围内声明

这里是接口和counter_logs_t的implemantation:

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”没有在范围

+0

'add_counter'是'counter_logs_t'的方法,但它是从'logs_t叫:[?我应该使用f(无效)或f()] begin_record','logs_t'不知道'add_counter' – Hacketo

+3

( https://isocpp.org/wiki/faq/newbie#void-in-param-list) – crashmstr

回答

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; 
+0

@ CoryKraner-谢谢。但现在我得到以下错误“错误:请求成员”print_counter“在'container1',这是非班级类型'... – Sarti

+0

@SaritRotshild看到我的[回复](http://stackoverflow.com/a/35700364/4342498) – NathanOliver

+0

@ CoryKraner-再次感谢....我尝试了最差的选择(与{}),并得到以下错误“错误:没有匹配函数调用'counter_logs_t :: counter_logs_t <大括号...> – Sarti

1

你也有一个问题,即

counter_logs_t container1(); 

是不是声明一个变量。它声明了一个名为container1的函数,该函数重新编译了一个counter_logs_t并且不需要任何东西。您需要将其更改为

counter_logs_t container1; 

要声明变量。

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,因为这是一种虚拟方法。

相关问题