2010-12-27 17 views
0

私は以下の機能を持っていますが、私のコンパイラ(VS2003)はassignement T = ....が不正だと言っています。誰かが私が間違ったことを明確にすることはできますか?値の型はboost :: variantです。ノードは構造体です。テンプレートの種類を返すテンプレート関数

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; 
          } 

      } 

     } 
    } 

答えて

5

あなたは変数を宣言する必要があります。

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タイプ、ない変数名です。一般的なケースでは、@sharptoothのように変数を宣言する必要があります(これはどのような関数の通常のワークフローです)。あなたの特定のケースで

、それだけで値を返す方が良いでしょう - 追加の変数は必要ありません:

return (*att_iter).value; 

をか、いっそのこと:

return att_iter->value; 
関連する問題