C++ 这个简单的指针相等测试怎么会失败呢? void FileManager::CloseFile(文件*const文件) { 对于(int i=0;i

C++ 这个简单的指针相等测试怎么会失败呢? void FileManager::CloseFile(文件*const文件) { 对于(int i=0;i,c++,pointers,equality,C++,Pointers,Equality,_openFiles是FileManager的私有成员,只是文件*的数组 当在即时窗口中执行完全相同的测试时,我得到的结果是1 EDIT添加==true纯粹是为了检查是否正常!!您已经 void FileManager::CloseFile(File * const file) { for (int i = 0; i < MAX_OPEN_FILES; ++i) { if ((_openFiles[i] == file) == true) {

_openFiles是FileManager的私有成员,只是文件*的数组
当在即时窗口中执行完全相同的测试时,我得到的结果是1

EDIT添加==true纯粹是为了检查是否正常!!

您已经

void FileManager::CloseFile(File * const file)
{
    for (int i = 0; i < MAX_OPEN_FILES; ++i)
    {
        if ((_openFiles[i] == file) == true)
        {
            _openFiles[i] == NULL;
        }
    }
...
应该是这样吗

 _openFiles[i] == NULL;

没有足够的因果报应来添加评论,但是如果cma的回答是正确的(有条件的应该是一个作业),那么我希望原始帖子没有被修复,或者至少有一个注释表明它已经被修复。我盯着它看了很长时间,试图找到错误,然后放弃并阅读答案


对于任何可以删除此“答案”的人,请随意删除它。

这样比较就不会失败?我假设“即时窗口”意味着您是在某种调试器中执行此操作的--您没有单步执行程序吗?另外:编译时会出现完整警告(甚至警告为错误)为了避免这样的错误。问:我们今天学到了什么?A1:修复的字符越少,就越难找到错误。A2:永远不要在条件中做作业。如果我可以提供一个建议的话:我想你真的应该在这里使用更高级的数据结构。某种哈希可以防止每次在调用了at函数,我只能想象在“管理器”上还有其他类似的函数像这样的类。管理器类在很多情况下也是一种代码味道……类还处于初级阶段,哈希也在列表中!但感谢您的建议,因为它证实了我的观点……是的……我也在想同样的事情。我一辈子都无法弄清楚它到底出了什么问题/
 _openFiles[i] = NULL;