C ++函数模板命名空间错误

时间:2014-08-11 11:01:59

标签: c++ function templates

编写简单的函数模板时出错。如果有人能告诉我我做错了什么,我将不胜感激。

错误:

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;

1 个答案:

答案 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);
}

注意:

  • 您应该更喜欢将迭代器而不是容器传递给您的函数,它会使您的代码更通用(即ala C ++标准库)