【发布时间】:2013-11-22 01:39:19
【问题描述】:
所以我有一个具有这种数据结构的作业
struct ZipCode
{
char s[4];
int zip;
bool operator() (const ZipCode &lhs, const ZipCode &rhs) const
{return lhs.s[1] < rhs.s[1];}
bool operator() (const char* st, const int &z) const
{return st == s && z == zip;}
bool operator() (const int &z) const
{return zip == z;}
};
然后我将这些数组插入到 STL:set 中,并试图稍后找到具有特定 zip 的数组。我通过像这样使用 find_if 来做到这一点
std::set<ZipCode, ZipCode>::iterator itz = find_if(mySet.begin(), mySet.end(),ZipCode()(0xbb77));
当我编译它时,我得到以下错误:
c:\program files (x86)\microsoft visual studio 10.0\vc\include\algorithm(83):错误 C2064:术语不计算为采用 1 个参数的函数
我不确定问题是什么或如何解决此问题
【问题讨论】:
-
你还没有问过这部分,但我会告诉你
st == s没有做你认为它在这个表达式中所做的事情:bool operator() (const char* st, const int &z) const {return st == s && z == zip;} -
哇,我有点惊讶我错过了。把它换成
strcmp(st,s)虽然它工作正常,我有点惊讶你现在指出了它。 -
如果编译器折叠它们以共享相同的存储空间,您可能会在字符串常量上走运。 IE。第 100 行上的
"abc"和第 200 行上的"abc"可能在生成的可执行文件中位于相同的位置,所以指向它们的指针会因为运气而比较相等。不过,我绝不会依赖这种行为。