Otrzymuję komunikat o błędzie kompilatora podczas próby uzyskania dostępu do funkcji składowej szablonu klasy szablonu z poziomu innej klasy szablonu. Wywołanie funkcji do getSubmatrix
powoduje ostrzeżenia kompilatora, "wynik wyrażeń nieużywany", o parametrach (0, 0)
, aw końcu błąd kompilatora "odwołanie do niestatycznej funkcji składowej musi być wywołane".Nie można wywołać funkcji składowej szablonu klasy szablonu z innej klasy szablonu
Klasa matrix:
template <std::size_t m, std::size_t n, typename T, std::size_t rowPadding = 0>
class Matrix
{
public:
...
template <std::size_t p, std::size_t q>
Matrix<p, q, T, n - q>& getSubmatrix(std::size_t column, std::size_t row)
{
...
}
};
Transformacja klasa:
template <typename T>
class Transform
{
public:
...
Matrix<4, 4, T> matrix() const
{
...
Matrix<4, 4, T> result;
result.getSubmatrix<3, 3>(0, 0) = Matrix<3, 3, T>();
...
}
};
Należy pamiętać, że zmieniając typ matrycy do Matrix<4, 4, float>
zamiast Matrix<4, 4, T>
spowoduje ważnej kompilacji. Kompilatorem jest clang 4.0, a wersją językową jest C++ 11.
Bardzo dziękuję za ten wpis, ten był bardzo trudny do wyciągnięcia z komunikatu o błędzie Clang. –