0
votes

Pourquoi ai-je du mal à compiler une classe modélisée?

J'ai été coincé sur ce code pendant un moment et je ne peux pas l'obtenir pour compiler, qu'est-ce que je fais vraiment mal? S'il y a des bugs présents quand il compile, veuillez les ignorer comme je peux résoudre ce problème. À l'heure actuelle, j'essaie juste de le faire courir. Merci d'avance. XXX

Les erreurs de l'IDE I UTILISE sont les suivantes:

Main.cpp: 8: 51: Erreur: Aucun modèle nommé 'matrix' STD :: Ostream & Operateur << (STD :: Ostream & OS, const matrix & matrix);

Main.CPP: 15: 24: ERREUR: Aucun modèle de fonction correspond à la spécialisation de la fonction Modèle de fonctionnement 'Opérateur << "ami STD :: Ostream & Opérateur << <> (STD :: Ostream & OS, const matrice & matrix);

Main.cpp: 35: 32: Remarque: dans l'instanciation de la classe de modèle 'Matrix' demandée ici Tapis matricielle;


2 commentaires

FWIW, il n'existe pas d'une classe modélisée ou d'une fonction template. Il existe cependant des modèles de classes et des modèles de fonctions.


Votre code comprend quelque chose étiqueté «mode de fixation possible» - pourquoi seulement possible? Quel est le problème avec votre propre réponse? (Continuez à suivre les messages d'erreur. Vous êtes proche.)


3 Réponses :


3
votes

Si vous déconnectez la ligne 4, puis modifiez-le comme suit, le code que vous avez compile:

In function 'std::ostream& operator<<(std::ostream&, const Matrix<T, NROWS, NCOLS>&)':
31:1: warning: no return statement in function returning non-void [-Wreturn-type]


0 commentaires

1
votes
#include <cstddef>
#include <iostream>

template<typename, std::size_t, std::size_t> class Matrix;

template<typename T, std::size_t NROWS, std::size_t NCOLS>
std::ostream& operator<<(std::ostream &os, Matrix<T, NROWS, NCOLS> const &matrix)
{
    for (std::size_t row{}; row < NROWS; ++row, os.put('\n'))
        for (std::size_t col{}; col < NCOLS; ++col)
            os << matrix.container[row][col] << ' ';
    return os.put('\n');
}

template<typename T, std::size_t NROWS = 1, std::size_t NCOLS = 1>
class Matrix {
    T container[NROWS][NCOLS] = {};
    friend std::ostream& operator<< <>(std::ostream&, Matrix<T, NROWS, NCOLS> const&);
};

int main()
{
    Matrix<float, 10, 5> mat;
    std::cout << mat;
}
Please get rid of the C header <string.h>.

0 commentaires

1
votes

Vous devez définir matricielle avant que ce soit d'utilisation: xxx

et ajoutez une déclaration de retour à l'opérateur <<, qui renvoie le système d'exploitation. Vous n'avez pas non plus besoin de duplication de l'opérateur << Déclaration, vous ne pouvez le déclarer que dans un organisme de classe.


0 commentaires