奇怪的未声明变量编译器错误
Bizarre Undeclared Variable Compiler Error
问题:编译器声明了一个看似无意义的错误,即类成员函数中的局部变量"未在此范围内声明"。下面显示的代码是原始函数的简化实现,不知何故它仍然触发了相同的错误。此外,每当我重命名变量(在使用它的每个位置(时,错误都会消失,并在我将变量更改回其原始名称("次要"(后立即恢复。我不理解这种行为,也找不到任何关于导致编译器这样做的信息/帖子。有人可以就可能出现的问题提供建议吗?它是否表示我的代码中其他地方存在重大错误(例如矩阵类定义(?
细节:我正在使用 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);
这是一个有效但无用的类型强制转换。
因此,在其中一个包含文件中查找一些邪恶的宏。
- MSVC多行宏编译器错误
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++,我收到一个无法理解的编译器错误
- 我收到同义重复编译器错误。我应该如何修复"类型"X"的参数与类型"X"的参数不兼容?
- 重载方法的方式会在使用临时调用时生成编译器错误
- 尝试使用继承和模板实现CRTP.Visual Studio正在生成编译器错误
- 编译器错误:destuctor 的更宽松的抛出说明符
- Android NDK clang 编译器错误在 Windows 上显示'No such file or directory'
- C++ G++ 编译器 - 错误:隐式声明的定义
- 这个失败的测试是将零添加到空指针未定义的行为、编译器错误还是其他什么?
- 模板模板参数和模板别名:编译器错误?
- C++ 编译器错误:P1LinkedList.cpp:145:错误:重载的"to_string(int&)"调用不明确
- 在gcc中意外调用了Const重载.编译器错误或兼容性修复程序
- C1001内部编译器错误是由于矢量初始化(如数组)引起的
- 编译器错误(英特尔并行工作室 2019 与 Visual Studio 社区 2019)
- 如何在C++中克服此 C4430 编译器错误?
- 尝试使用 WinBGI 显示文本时出现编译器错误
- 使用typedef'ed返回类型声明友元函数时出现编译器错误
- 如何在类模板的成员函数中正确调用函数对象?正在生成 Visual Studio 编译器错误 C2440
- C++自定义分配器大小参数作为模板参数会引发编译器错误