【发布时间】:2013-12-26 11:42:38
【问题描述】:
我在我的代码中使用 std::count()。我的代码在 windows 中成功构建,但我无法在 Solaris 下编译,
下面给出完整的功能,
unsigned int
BBGENTVerify::tokenizeTickerEID(const std::string p_czTickerEIDs,\
std::vector<int>& p_rTickerEIDsVector){
int l_iStartPos = -1;
int l_iEndPos = -1;
unsigned int l_iEIDsPresent = std::count(p_czTickerEIDs.c_str(), \
p_czTickerEIDs.c_str() + p_czTickerEIDs.size(), ',') + 1;
do{
l_iEndPos = p_czTickerEIDs.find(",", l_iStartPos + 1);
if (l_iEndPos == -1){
l_iEndPos = p_czTickerEIDs.size() - l_iStartPos;
}
p_rTickerEIDsVector.push_back(atoi\
(p_czTickerEIDs.substr(l_iStartPos +1, l_iEndPos).c_str()));
l_iStartPos = l_iEndPos;
}while(p_rTickerEIDsVector.size() < l_iEIDsPresent);
return p_rTickerEIDsVector.size();
}
我遇到了错误,
"src/fileENTForP.cpp", line 136: Error: Could not find a match for std::count<std::InputIterator, std::T, std::Size>(const char*, const char*, char) needed in BBGENTVerify::tokenizeTickerEID(const std::string, std::vector<int>&).
1 Error(s) detected.
clearmake: Error: Build script failed for "release/sun_solaris64/BBGENTVerify.o"\
此代码在windows平台编译成功。 我做了一些调查,发现 Solaris 编译器不知何故采用了其他一些模板签名,带有一个额外的参数。
Error: Could not find a match for std::count<std::InputIterator, std::T, std::Size>
(const char*, const char*, char)
而标准说的是签名,
template <class InputIterator, class T>
typename iterator_traits<InputIterator>::difference_type
count (InputIterator first, InputIterator last, const T& val);
代码需要这个签名
std::count<std::InputIterator, std::T, std::Size>
我在哪里使用/也是标准 C++ 支持的地方,
template <class InputIterator, class T>
std::count(InputIterator first, InputIterator last, const T& val);
请帮我处理这段代码。
【问题讨论】:
-
大多数时候你都在谈论 std::count 但你也提到 std::copy() - 错字?
-
感谢@John.. 更正。
标签: c++ stl stl-algorithm