编写简单的函数模板时出错。如果有人能告诉我我做错了什么,我将不胜感激。
错误:
z:\n4\pkg\mrservers\mrimaging\seq\cestipat_offsetseries\GlobalVariable.h(118) : error C2825: 'type1': must be a class or namespace when followed by '::'
z:\n4\pkg\mrservers\mrimaging\seq\cestipat_offsetseries\GlobalVariable.h(118) : error C2039: 'const_iterator' : is not a member of '`global namespace''
z:\n4\pkg\mrservers\mrimaging\seq\cestipat_offsetseries\GlobalVariable.h(118) : error C2146: syntax error : missing ';' before identifier 'i1'
...... 我的功能如下(我已标记错误显示的行号)
template<typename type1>
void PrintVector(type1 VectorIn_1) {
long lLenghtVec = VectorIn_1.size();
typename type1::const_iterator i1 = VectorIn_1.begin(); // line 118
for(int i = 0; i != lLenghtVec; ++i){ // line 119
std::cout << std::setw(4) << *i1 << " " <<std::endl;
++i1;
}
}
使用的命名空间: 一开始,我使用过ARMADILLOS lib
#include <armadillo>.
#define ARMA_64BIT_WORD
#include "armadillo-3-910-0/include/armadillo"
using namespace arma;
答案 0 :(得分:2)
您没有正确调用模板(可能是传递非类型,但未显示调用网站),以下compiles and run fine(我没有修改您的函数):
#include <iostream>
#include <vector>
#include <iomanip>
template<typename type1>
void PrintVector(type1 VectorIn_1) {
long lLenghtVec = VectorIn_1.size();
typename type1::const_iterator i1 = VectorIn_1.begin(); // line 118
for(int i = 0; i != lLenghtVec; ++i){ // line 119
std::cout << std::setw(4) << *i1 << " " <<std::endl;
++i1;
}
}
int main() {
std::vector<int> v = { 1, 2, 3, 4};
PrintVector<std::vector<int>>(v);
}
注意:强>