2017-02-24 7 views
0

Diab Compiler beschwert sich in Zeile @@@ dieser Typname ist nicht zulässig.C++ - Fehler in der Vorlage Funktionsaufruf: Typ Name ist nicht zulässig

template< 
    Task TASK, 
    Event EVENT> 
class TManager : 
    public AbstractTManager, 
    public common::ITManager 
{ 
    public: 
    typedef os::EManager<TASK> tEManager; 

    TManager() 
    { /* ... */} 

    virtual void init() 
    { 

     tEManager::registerCallback< 
      EVENT, 
      TManager, /* @@@ */ 
      &TManager::func>(*this); 
    } 

    void func() 
    { /* ... */} 
} 

In emanager register wird in folgender Weise definiert:

template<TType task> 
class EManager 
{ 
public: 
    template< 
     EType event, 
     typename e_listener, 
     void (e_listener::*TMethod)() 
     > 
    static void registerCallback(e_listener& listener) 
    { 
     /* ... */ 
    } 
} 

Das zweite Template-Argument e_listener mit Stichwort Typname ist, damit ich weiß nicht, warum es Probleme berichtet. Habe ich etwas verpasst? Vielen Dank für Hilfe im Voraus.

+3

Bitte geben Sie eine [mcve]. – Barry

+1

Wahrscheinlich verwandt: http://stackoverflow.com/questions/610245/where-and-why-do-i-have-to-put-the-template-and-typeam-keywords. Der Fehler würde passen, wenn der Compiler "eMANager" als Wert behandelt, "<" als kleiner als und "EVENT" als den anderen Operanden, wobei TManager der zweite Operand eines Komma-Operators ist. – chris

Antwort

0

sollten Sie template hinzufügen:

tEManager::template registerCallback< 
     EVENT, 
     TManager, 
     &TManager::func>(*this); 
Verwandte Themen