【问题标题】:Can I use template variable in the body of template function in c++我可以在 C++ 的模板函数体中使用模板变量吗
【发布时间】:2013-08-05 20:20:20
【问题描述】:

我写了如下两段代码,编译器输出错误。但我不知道为什么。

模板函数文件:

#ifndef INCLUDE_XXXX
#define INCLUDE_XXXX
#include <vector>
using namespace std;

namespace testns {
    template< typename T > 
    inline T ssum(std::vector<T> v) 
    {
      T _sum;
      std::vector<T>::iterator iter;           // <-------------- **********
      for (iter=v.begin(); iter!=v.end(); ++iter) {
         _sum=_sum+(*iter);
      }
      return _sum;
    }; // ssum
}
#endif

主要代码如下,

#include <vector>
#include <iostream>
#include "wyko.hpp"
using namespace std;

int main(){
   vector<double> v;
   v.push_back(3.0);
   v.push_back(2.0);
   v.push_back(1.0);
   cout<<testns::ssum<double>(v)<<endl;;
   return 0;
}

当我编译它时,输出如下:

wyko.hpp:14: error: expected `;' before ‘iter’
wyko.hpp:15: error: ‘iter’ was not declared in this scope

我知道问题出在注释行和&lt;T&gt; 上,但不知道如何解决。

谢谢

【问题讨论】:

  • 在 VS 2012 中对我来说可以编译,唯一的问题是 _sum 未初始化。你应该通过引用传递向量,而不是值。
  • @Jonathan VS 在作弊。这不是有效的 C++。
  • 您应该删除头文件中的using namespace std; 行,因为无论如何您都在使用限定符,而且在头文件中包含这种东西通常是个坏主意。
  • 注意std::accumulate 做同样的工作。

标签: c++ function templates


【解决方案1】:

修复:-

T _sum =0; //initialize it
typename std::vector<T>::iterator iter;  
// ^^^add typename

【讨论】:

  • typename 有道理,但你真的要初始化_sum吗?
猜你喜欢
  • 1970-01-01
  • 2011-01-14
  • 1970-01-01
  • 2020-02-23
  • 2012-07-20
  • 2019-10-29
  • 1970-01-01
  • 2022-10-14
  • 2014-06-07
相关资源
最近更新 更多