0
で宣言されていなかった私は、次のテンプレート機能のVisual Studio 2015で正常にコンパイルさ変数がこの範囲gccのエラー
//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;
}
}
を持っている、しかし、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が不平を言っている点では間違いありません。誰もこのエラーの理由で光を当てることはできますか? Glibcの中
「#を含む」ことができませんでしたか?いくつかの標準的なライブラリの実装では、他の標準ヘッダファイルが自動的にインクルードされますが、異なる実装ではそうではありません。それがあなたの質問に答えることができないなら、誰もが再現できる[MCVE]を提供してください。 –
[MCVE]を投稿する必要があります。そして、私は本当にそれを言うことに疲れています。 –