template<int I, int J, int K, class T>
MatrixProduct<I,J,K,T> operator*(Matrix<I,J,T> const& m1,
Matrix<K,J,T> const& m2)
{
return MatrixProduct<I,J,K,T>(m1, m2);
}
template<int I, int J, int K, class T> MatrixProduct<I,J,K,T> operator*(Matrix<I,J,T> const& m1, Matrix<K,J,T> const& m2) { return MatrixProduct<I,J,K,T>(m1, m2); }
MatrixProduct<I,J,K> operator *(const Matrix<I,J> &, const Matrix<K,J> &) : could not deduce template argument for 'const Matrix<K,J> &' from 'vec4'
...pour les trois produits.
En es-tu sûr ? Je ne l'ai pas essayé (il faut que j'ailles à une autre machine pour essayer VC++), mais a priori, je me pose la question parce que le message d'erreur parle des « const Matrix<I,J> », et non des « const Matrix<I,J,T> ». Ce qui laisse penser que tu as en fait compiler avec une version incompatible de la déclaration de l'opérateur, où T n'était pas un paramètre du template.
Je ne vois pas pourquoi il ne peut pas déduire le second argument de * ??
D'après le message d'erreur, le compilateur voit un operator* avec comme paramètre des Matrix<I,J>.
-- James Kanze GABI Software Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
Manuel Zaccaria wrote:
Je sèche.... j'essaie de comprendre pourquoi dans :
// (exemple simplifié)
template<int I, int J, class T = float>
struct Matrix
{
// ...
template<int I, int J, int K, class T>
MatrixProduct<I,J,K,T> operator*(Matrix<I,J,T> const& m1,
Matrix<K,J,T> const& m2)
{
return MatrixProduct<I,J,K,T>(m1, m2);
}
MatrixProduct<I,J,K> operator *(const Matrix<I,J> &, const Matrix<K,J> &) :
could not deduce template argument for 'const Matrix<K,J> &' from 'vec4'
...pour les trois produits.
En es-tu sûr ? Je ne l'ai pas essayé (il faut que j'ailles à
une autre machine pour essayer VC++), mais a priori, je me pose
la question parce que le message d'erreur parle des « const
Matrix<I,J> », et non des « const Matrix<I,J,T> ». Ce qui
laisse penser que tu as en fait compiler avec une version
incompatible de la déclaration de l'opérateur, où T n'était pas
un paramètre du template.
Je ne vois pas pourquoi il ne peut pas déduire le second
argument de * ??
D'après le message d'erreur, le compilateur voit un operator*
avec comme paramètre des Matrix<I,J>.
--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
template<int I, int J, int K, class T> MatrixProduct<I,J,K,T> operator*(Matrix<I,J,T> const& m1, Matrix<K,J,T> const& m2) { return MatrixProduct<I,J,K,T>(m1, m2); }
MatrixProduct<I,J,K> operator *(const Matrix<I,J> &, const Matrix<K,J> &) : could not deduce template argument for 'const Matrix<K,J> &' from 'vec4'
...pour les trois produits.
En es-tu sûr ? Je ne l'ai pas essayé (il faut que j'ailles à une autre machine pour essayer VC++), mais a priori, je me pose la question parce que le message d'erreur parle des « const Matrix<I,J> », et non des « const Matrix<I,J,T> ». Ce qui laisse penser que tu as en fait compiler avec une version incompatible de la déclaration de l'opérateur, où T n'était pas un paramètre du template.
Je ne vois pas pourquoi il ne peut pas déduire le second argument de * ??
D'après le message d'erreur, le compilateur voit un operator* avec comme paramètre des Matrix<I,J>.
-- James Kanze GABI Software Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
Manuel Zaccaria
kanze a écrit:
[...]
MatrixProduct<I,J,K> operator *(const Matrix<I,J> &, const Matrix<K,J> &) : could not deduce template argument for 'const Matrix<K,J> &' from 'vec4'
En es-tu sûr ? Je ne l'ai pas essayé (il faut que j'ailles à une autre machine pour essayer VC++), mais a priori, je me pose la question parce que le message d'erreur parle des « const Matrix<I,J> », et non des « const Matrix<I,J,T> ». Ce qui
En effet, ça m'avait frappé et j'ai examiné et examiné et examiné mon code...
laisse penser que tu as en fait compiler avec une version incompatible de la déclaration de l'opérateur, où T n'était pas un paramètre du template.
Je ne vois pas pourquoi il ne peut pas déduire le second argument de * ??
D'après le message d'erreur, le compilateur voit un operator* avec comme paramètre des Matrix<I,J>.
...sans voir ce qui me pendait littéralement au nez.
Merci James.
Manuel
kanze a écrit:
[...]
MatrixProduct<I,J,K> operator *(const Matrix<I,J> &, const Matrix<K,J> &)
:
could not deduce template argument for 'const Matrix<K,J> &' from 'vec4'
En es-tu sûr ? Je ne l'ai pas essayé (il faut que j'ailles à
une autre machine pour essayer VC++), mais a priori, je me pose
la question parce que le message d'erreur parle des « const
Matrix<I,J> », et non des « const Matrix<I,J,T> ». Ce qui
En effet, ça m'avait frappé et j'ai examiné et examiné et examiné mon
code...
laisse penser que tu as en fait compiler avec une version
incompatible de la déclaration de l'opérateur, où T n'était pas
un paramètre du template.
Je ne vois pas pourquoi il ne peut pas déduire le second
argument de * ??
D'après le message d'erreur, le compilateur voit un operator*
avec comme paramètre des Matrix<I,J>.
...sans voir ce qui me pendait littéralement au nez.
MatrixProduct<I,J,K> operator *(const Matrix<I,J> &, const Matrix<K,J> &) : could not deduce template argument for 'const Matrix<K,J> &' from 'vec4'
En es-tu sûr ? Je ne l'ai pas essayé (il faut que j'ailles à une autre machine pour essayer VC++), mais a priori, je me pose la question parce que le message d'erreur parle des « const Matrix<I,J> », et non des « const Matrix<I,J,T> ». Ce qui
En effet, ça m'avait frappé et j'ai examiné et examiné et examiné mon code...
laisse penser que tu as en fait compiler avec une version incompatible de la déclaration de l'opérateur, où T n'était pas un paramètre du template.
Je ne vois pas pourquoi il ne peut pas déduire le second argument de * ??
D'après le message d'erreur, le compilateur voit un operator* avec comme paramètre des Matrix<I,J>.
...sans voir ce qui me pendait littéralement au nez.