【问题标题】:Integer Vector element comparison using subscript operator fails, but succeeds using at function使用下标运算符比较整数向量元素失败,但使用 at 函数成功
【发布时间】:2012-02-29 12:20:21
【问题描述】:

我正在编写一个回调函数,它引用了一个在结构中传递给它的 int 向量。当我尝试使用下标运算符 [] 访问向量中的元素时,Intellisense 指示 == 无法比较这两个元素,具体错误是 错误 C2678:二进制“==”:未找到采用“std::vector<_ty>”类型的左侧操作数的运算符(或没有可接受的转换)。但是使用 at() 函数时没有问题。

//body of call back function
searchInfo* argVal = (searchInfo*) Parameter;
for(int i = argVal->inclStartPos; i < argVal->exclEndPos; ++i){
    if(argVal->numVector[i] == argVal->searchNum)//problem here
        argVal->result = true;
//this is the structure passed through pointer

struct searchInfo{
int inclStartPos;
int exclEndPos;
vector<int>* numVector; 
int searchNum;
bool result;
};

由于向量的 [] 运算符和 at() 函数几乎以相同的方式工作(这里的区别无关紧要),为什么会出错?

【问题讨论】:

    标签: c++ windows api stl vector


    【解决方案1】:

    其实你是在比较vector和int,因为numVector这个字段有类型

    vector<int>*
    

    简单地说,您已经声明了一个向量数组。 运算符 [] 将返回一个向量类型的值。

    您可能拼错了声明。也许你想声明 numVector 如下:

    vector<int> numVector;
    

    【讨论】:

    • 不知道为什么这被否决了。可能表达的不够清楚,但它是对的——numVector 是一个指向向量的指针,它与向量数组兼容。因此numVector[i]vector&lt;int&gt;;但numVector-&gt;at(i) 会起作用。
    • @Chowlett:您能否详细说明为什么 numVector->at(i) 会起作用。 AFAIK '==' 运算符在两边都有相同的数据类型,所以表达式应该有效,但它没有。
    • @AquaAsh - numVector 是一个指针,而不是一个实际的向量。因此numVector[i] 将被解释为从地址numVector 下标到数组vector&lt;int&gt;[],而不是从vector&lt;int&gt; 中获取元素。 numVector[i] == searchNum 比较 vector&lt;int&gt;int.numVector-&gt;at(i)numVector 指向的对象上调用 at - 它等效于 *numVector.at(i)
    猜你喜欢
    • 2020-04-12
    • 1970-01-01
    • 2020-04-07
    • 2017-04-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-17
    • 2020-12-14
    • 1970-01-01
    相关资源
    最近更新 更多