Sarit8
Sarit8

Reputation: 33

C++- getting error while try to use template

I am new to c++, and reying to use templates. I have a function which can get some types.

header:

template <typname T>
response_t send_sequence_to_device(map<const string_t, T*> msg2device_p,
    vector<response_t>& result_list, ushort num_attempts=SEND_NUM_ATTEMPTS);

Source:

template <typname T>
response_t send_sequence_to_device( map<const string_t, T*> msg2device_p,
    vector<response_t>& result_list, ushort num_attempts )
{
    bool is_ok_flag = true;
    response_t r;
    raftor1_logs_t* rlogs;
    map<const string_t, T*>::iterator msg_it;
    for( msg_it=msg2device_p.begin(); msg_it!=msg2device_p.end() and is_ok_flag; msg_it++ )
    {
        r = msg_it->second->send(msg_it->first, true, num_attempts);
        result_list.push_back(r);
        is_ok_flag = is_ok_flag and is_ok(r);

        if( not(is_ok_flag) )
        {
            stringstream ss;
            ss << "ALERT: Sequence aborted due to error on message [" << msg_it->first << "] ";
            if( r.erred() )
                ss << "due to communication failure.";
            else
                ss << "with error message [" << r.msg << "].";
            rlogs->alert.begin_record();
            rlogs->alert.write( ss.str() );
            rlogs->alert.end_record();
        }
    }

    if( is_ok_flag )
        r.set_ok("ok.\n");

    return r;
}

I get the following error:

device_manager.cpp|1076|error: need 'typename' before 'std::map, T*>::iterator' because 'std::map, T*>' is a dependent scope

Upvotes: 0

Views: 50

Answers (1)

John Zwinck
John Zwinck

Reputation: 249123

Here:

map<const string_t, T*>::iterator msg_it;

You need this:

typename map<const string_t, T*>::iterator msg_it;

Upvotes: 1

Related Questions