gpt4 book ai didi

c++ - "no operator "!= "matches these operands"用于迁移到 VS2015 后的迭代器比较

转载 作者:行者123 更新时间:2023-11-28 02:01:55 29 4
gpt4 key购买 nike

我正在将 VC++6 项目升级到 VS2015。我有一个 if 语句,它检查迭代器是否为 NULL(实际上为 0)。该代码在 VC++6 和 VS2003 中构建时没有任何错误,但在 VS2015 中它会抛出错误。这是代码:

这里是类型定义:

#define NULL    0    

typedef std::list <bscTrk *> bscTL;
typedef bscTL::iterator bscTLI; // data type of iterator into trunk linked list

typedef struct
{
int TSNum;
bscTLI tli; // iterator of a trunk to be reset
} TnkReset;
extern TnkReset gTnkReset;

这是VS2015中抛出错误的一段代码:

if (gTnkReset.tli != NULL)   
ResetRadTnk (gTnkReset.tli);

错误:

Severity Code Description Project File Line Column Suppression State Detail Description Error (active) no operator "!=" matches these operands BSCC operand types are: bscTLI != int

我已经尝试过 Nullptr 但它没有帮助。这里有什么问题?

最佳答案

除了同一容器中的其他迭代器之外,您永远不应将迭代器与其他任何东西进行比较。初始化“空”迭代器的正确方法是为其容器赋予 end() 的值。

std::list<int> list;
auto itor = list.end();

// ...

if (itor == list.end())
// itor is not pointing anywhere interesting

至于为什么您现在在 2015 年遇到此错误,但在 2003 年或(哎呀!)6.0 中却没有,Visual C++ 标准库中迭代器的实现随着时间的推移发生了变化。它可能有一个构造函数接受一个指针或一些奇怪的 operator==,谁知道呢。

关于c++ - "no operator "!= "matches these operands"用于迁移到 VS2015 后的迭代器比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39105427/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com