【发布时间】: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
我知道问题出在注释行和<T> 上,但不知道如何解决。
谢谢
【问题讨论】:
-
在 VS 2012 中对我来说可以编译,唯一的问题是
_sum未初始化。你应该通过引用传递向量,而不是值。 -
@Jonathan VS 在作弊。这不是有效的 C++。
-
您应该删除头文件中的
using namespace std;行,因为无论如何您都在使用限定符,而且在头文件中包含这种东西通常是个坏主意。 -
注意
std::accumulate做同样的工作。