未在此范围内声明变量gcc错误
variable was not declared in this scope gcc error
我有以下模板函数
//This is a very naive implementation, but it will do
template<class T>
T determinant(const std::vector<std::vector<T>> &matrix)
{
sci::assertThrow(square(matrix), sci::err());
if (matrix.size() == 1)
return matrix[0][0];
else if (matrix.size() == 2)
return matrix[0][0] * matrix[1][1] - matrix[0][1] * matrix[1][0];
else
{
double result = 0;
std::vector<std::vector<double>> minor(matrix.size() - 1);
double multiplier = 1.0;
for (size_t i = 0; i < matrix.size(); ++i)
{
for (size_t j = 0; j < minor.size(); ++j)
{
if (j < i)
minor[j] = matrix[j];
else
minor[j] = matrix[j + 1];
}
result += multiplier * matrix[0][i] * sci::determinant(minor);
multiplier *= -1.0;
}
return result;
}
}
它与visualstudio 2015一起编译得很好,然而gcc表示
g++ -c -Wall -g -std=c++11 -fPIC -o3 -o build/svector.o svector/svector.cpp
In file included from svector/svector_internal.h:6:0,
from svector/svector.cpp:1:
svector/../include/svector/dep/svector.h: In function 'T sci::determinant(const std::vector<std::vector<T> >&)':
svector/../include/svector/dep/svector.h:2888:28: error: 'minor' was not declared in this scope
for (size_t j = 0; j < minor.size(); ++j)
^
svector/../include/svector/dep/svector.h:2895:60: error: 'minor' was not declared in this scope
result += multiplier * matrix[0][i] * sci::determinant(minor);
^
在我看来,在gcc抱怨的这一点上,minor肯定在范围内。有人能解释一下这个错误的原因吗?
sys/sysmacros.h
包含宏定义:
# define major(dev) gnu_dev_major (dev)
# define minor(dev) gnu_dev_minor (dev)
这可能是通过您正在包含的某个系统标头包含的。
变量定义中minor
后面的括号会引起宏调用,从而更改变量名。minor
的其他用法没有括号,因此不会调用宏,这会导致minor
引用一个不存在的变量。
您可以重命名minor
变量或取消定义minor
以修复错误。
相关文章:
- Visual C++: MSVC vs. GCC+CLANG: 处理 lambda 捕获类成员变量,正确的方法是什么?
- 使用变量模板的递归计算 - gcc 与 clang
- 条件变量:wait_for.gcc错误
- 是否可以在 GCC 中使用带有 C++17 的显式寄存器变量?
- [[maybe_unused]] 在成员变量上,GCC 警告(不正确?)该属性被忽略
- 如何使用 gcc 内联汇编器代码访问成员变量
- 是否有 GCC 标志来发出有关作用域内相同变量重定义的警告?
- 如果Constexpr - clang vs.GCC,则非constexpr变量
- GCC和Clang不警告未使用的异常变量
- gcc 和 clang 中 constexpr 静态成员变量的链接器错误
- GCC 仍然使用 -fno-threadsafe-static 生成保护变量
- 从成员变量访问静态 constexpr 成员,GCC 错误?
- 未定义的引用指针的变量模板在clang中功能,而不是GCC
- 为什么 GCC 不报告未初始化的变量
- gcc优化对具有明显恒定变量的循环的影响
- GCC shared_ptr和地图上make_shared分离的变量类型错误
- gcc中变量模板的错误显式模板专用化
- "constexpr"变量"used in its own initializer":Clang与GCC
- 未在此范围内声明变量gcc错误
- 未声明未使用的变量.gcc在取笑我