奇怪的未声明变量编译器错误

Bizarre Undeclared Variable Compiler Error

本文关键字:编译器 错误 变量 未声明      更新时间:2023-10-16

问题:编译器声明了一个看似无意义的错误,即类成员函数中的局部变量"未在此范围内声明"。下面显示的代码是原始函数的简化实现,不知何故它仍然触发了相同的错误。此外,每当我重命名变量(在使用它的每个位置(时,错误都会消失,并在我将变量更改回其原始名称("次要"(后立即恢复。我不理解这种行为,也找不到任何关于导致编译器这样做的信息/帖子。有人可以就可能出现的问题提供建议吗?它是否表示我的代码中其他地方存在重大错误(例如矩阵类定义(?

细节:我正在使用 CMake 生成的 Makefile 上的 g++ 在 Linux Mint 18 上进行编译。我尝试过使用和不使用各种编译器选项(例如 -O2、-Wall 等(,结果没有变化。我之前在Windows 7上使用MinGW和自己编写的Makefile编译并运行了此代码/项目的稍早版本,没有问题。我很乐意根据要求提供更多详细信息。

来自Matrix.cpp的修改/极简主义代码片段:

Matrix Matrix::BuildCofactorMatrix() const {
double minor (0.0);
minor = 1.0;
return Matrix(height_, width_);
}

警告消息:

/PATH-TO-PROJECT-ROOT/src/Matrix.cpp: 在成员函数 'Matrix Matrix::BuildCofactorMatrix(( const' 中:/PATH-TO-PROJECT-ROOT/src/Matrix.cpp:1123:5:错误:在此范围内未声明"次要" 次要 = 1.0;

2017-08-21 编辑:我删除了不必要的代码,并创建了一个真正的"最小,完整和可验证"的问题示例。对我来说,该错误似乎是iostream库的功能。如果我删除iostream包含,问题似乎消失了。但是,该错误还取决于用于编译的 c++ 标准。当我指定 g++ 使用 g++ 时,例如 -std=c++11 或 -std=c++14,问题仍然存在,但是一旦我删除规范(即 g++ -c Matrix.cpp(,错误就会消失。顺便说一下,我正在使用g ++ 4:5.3.1-1ubu。

除非我错过了什么,否则我在 iostream、istream、ostream 或 ios 中找不到任何提到"次要"一词的宏,但也许它在包含链的更上游......?

矩阵.hpp:

#ifndef MATRIX_HPP
#define MATRIX_HPP
class Matrix {
public:
void BuildCofactorMatrix() const;
};
#endif

矩阵.cpp:

#include "Matrix.hpp"
#include <iostream>
void Matrix::BuildCofactorMatrix() const {
double minor (0.0);
minor = 0.0;
}

我可以通过在函数之前添加#define minor(x) (x)来复制问题。

宏匹配minor(0.0)但没有"参数"minor

该行

double minor (0.0);

将替换为

double (0.0);

这是一个有效但无用的类型强制转换。

因此,在其中一个包含文件中查找一些邪恶的宏。