C++ 模板中的方法:一个有效,一个不实例化

C++ 模板中的方法:一个有效,一个不实例化,c++,templates,C++,Templates,Eclipse在第(1)行抱怨: 链接第(2)行时出错: 对“util::svector::erase(util::svector::iterator)”的未定义引用 您需要在方法定义前面加上类名: undefined reference to 'util::svector<int, 10>::erase(util::svector<int, 10>::iterator)' 模板 类svector{…}; 模板 类svector::迭代器svector::erase(

Eclipse在第(1)行抱怨:

链接第(2)行时出错:

对“util::svector::erase(util::svector::iterator)”的未定义引用
您需要在方法定义前面加上类名:

undefined reference to 'util::svector<int, 10>::erase(util::svector<int, 10>::iterator)'
模板
类svector{…};
模板
类svector::迭代器svector::erase(
类svector::迭代器位置){…}

当您在类之外内联方法时。

@potatostater原始文本很好。Eclipse在第(1)行抱怨,但另一个错误来自ld。对不起,这一位不清楚。我之所以编辑,是因为缺少代码格式正在删除尖括号中的所有内容。欢迎再次编辑,但请检查预览(一如既往)。是的,我也看到了,发布后。对于我的老眼睛来说,有太多的装饰。@laune同样在方法参数中,您不需要使用类型前缀。就像在
模板类svector::iterator svector::erase(迭代器位置){…}
中一样。干杯。呜呜,别介意我之前的评论。这是
关键字的有效用法。@Potatoswatter迭代器似乎可以工作。另外,我可以在这些地方使用
,效果很好-好的,刚刚看到你的最后一条评论。
typedef class util::svector<int, 10> vecIntX;
vecIntX v1;
for( int e = 0; e < 10; e++ ) v1.push_back( e );
vecIntX::iterator it = v1.begin();
v1.erase( it );   // (2)
"Invalid arguments, candidates are ? erase(?), ? erase(?,?)
undefined reference to 'util::svector<int, 10>::erase(util::svector<int, 10>::iterator)'
template <class T, int MAXSIZE>
class svector { ... };

template <class T, int MAXSIZE>
class svector<T,MAXSIZE>::iterator svector<T,MAXSIZE>::erase(
    class svector<T,MAXSIZE>::iterator position){ ... }