2010-12-27 7 views
0

Ich habe die folgende Funktion, aber mein Compiler (VS2003) sagt, dass die Zuordnung T = .... ist illegal. Kann jemand klären, was ich falsch gemacht habe? Der Werttyp ist eine boost :: variant. Knoten ist eine Struktur.Template-Funktion zum Zurückgeben Vorlage Typ

template <typename T> 
    T find_attribute(const std::string& attribute) 
    { 

     std::vector<boost::shared_ptr<node> >::iterator nodes_iter = _request->begin(); 

     for (; nodes_iter != _request->end(); nodes_iter++) 
     { 
      std::vector<node::attrib>::iterator att_iter = (*nodes_iter)->attributes.begin(); 
      for (; att_iter != att_iter; (*nodes_iter)->attributes.end()) 
      { 
       if ((*att_iter).key.compare(attribute) == 0) { 
        T = (*att_iter).value; //T : Illegal use of this type as an expression. 
            return T; 
          } 

      } 

     } 
    } 

Antwort

5

Sie sollten eine Variable deklarieren:

if ((*att_iter).key.compare(attribute) == 0) { 
    T temp = (*att_iter).value; //T : Illegal use of this type as an expression. 
    return temp; 
} 
4

T ist ein Typ, kein Variablenname. Im allgemeinen Fall sollten Sie eine Variable wie in @sharptooth angegeben deklarieren (dies ist der übliche Workflow für jede Funktion!).

In Ihrem speziellen Fall ist es besser, nur den Wert zurück - keine zusätzliche Variable benötigt wird:

return (*att_iter).value; 

oder noch besser:

return att_iter->value; 
Verwandte Themen