【发布时间】:2012-08-05 12:54:17
【问题描述】:
我写了followig函数,它在向量中搜索并找到指针在向量中的位置,如果找到成功,则返回迭代器:
template<class InputIterator>
InputIterator MainCore::findDeviceAccordingToIP ( const char * value )
{
std::vector<Device *>::iterator first,last;
first = this->devList->begin();
last = this->devList->end();
Device *temp;
for ( ;first!=last; first++){
temp = *first;
if ( strcmp(temp->endpoint->IPAddress.c_str(),value) == 0)
{
return first;
break;
}
}
//return false;
}
cpp 文件中的上述代码我将以下代码放在 *.h 文件中的 MainCore 类中:
template<class InputIterator>
InputIterator findDeviceAccordingToIP (const char *value );
现在当我调用另一个函数时,例如:
this->findDeviceAccordingToIP("192.168.2.11");
现在我有两个问题:
-
当我编译它时,我得到以下错误:
error: no matching function for call to MainCore::findDeviceAccordingToIP(const char [13]) 我如何获得 return T 和布尔值和迭代器?
【问题讨论】:
-
看起来您将模板定义放在 .cpp 文件中。你不能那样做。在 .h 中声明并定义您的模板
-
代码中不需要模板 - 您可能想要的返回类型是
std::vector<Device*>::iterator -
尝试使用 std::string 而不是 const char *。它更快、更高效。
标签: c++ templates stl vector iterator