11

別のテンプレート クラス内からテンプレート クラスのテンプレート メンバー関数にアクセスしようとすると、コンパイラ エラーが発生します。への関数呼び出しはgetSubmatrix、パラメーターに関するコンパイラ警告「式結果が使用(0, 0)されていません」になり、最終的に「非静的メンバー関数への参照を呼び出す必要があります」というコンパイラ エラーで失敗します。

マトリックス クラス:

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)
    {
        ...
    }
};

変換クラス:

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>();

        ...
    }
};

行列の型をMatrix<4, 4, float>ではなくに変更すると、Matrix<4, 4, T>コンパイルが有効になることに注意してください。コンパイラは clang 4.0 で、言語バージョンは C++11 です。

4

1 に答える 1

15

キーワードを追加する必要がありますtemplate:

result.template getSubmatrix<3, 3>(0, 0) = Matrix<3, 3, T>();
//     ^^^^^^^^

これがないと、コンパイラはそれを<比較演算子と見なします。

PS。その場合、g++ はもう少し理解しやすいエラーを生成します。

エラー: タイプ<unresolved overloaded function type>intバイナリのオペランドが無効ですoperator<

于 2013-05-04T02:20:48.380 に答える