Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2008
    Messaggi
    30

    [C++] Template e funzioni friend

    ciao ragazzi! avrei un problemino. sto costruendo una classe template matrice.... mi da i seguenti errori e warning.... ma non so il perche... sapete dirmi almeno a cosa sono dovuti?

    In file included from ..\Matrix.cpp:1:
    ..\Matrix.h:45: warning: friend declaration `bool operator==(const
    matrix<T>&, const matrix<T>&)' declares a non-template function
    ..\Matrix.h:45: warning: (if this is not what you intended, make sure
    the function template has already been declared and add <> after the
    function name here) -Wno-non-template-friend disables this warning
    ..\Matrix.h:46: warning: friend declaration `bool operator!=(const
    matrix<T>&, const matrix<T>&)' declares a non-template function
    ..\Matrix.h:58: warning: friend declaration `matrix<T> operator+(const
    matrix<T>&, const matrix<T>&)' declares a non-template function
    ..\Matrix.h:59: warning: friend declaration `matrix<T> operator-(const
    matrix<T>&, const matrix<T>&)' declares a non-template function
    ..\Matrix.h:61: warning: friend declaration `matrix<T> operator*(const
    matrix<T>&, const matrix<T>&)' declares a non-template function
    ..\Matrix.h:62: warning: friend declaration `matrix<T> operator*(const
    matrix<T>&, const T&)' declares a non-template function
    ..\Matrix.h:64: warning: friend declaration `matrix<T> operator^(const
    matrix<T>&, const NEWINT&)' declares a non-template function
    ..\Matrix.h:66: warning: friend declaration `std::istream&
    operator>>(std::istream&, matrix<T>&)' declares a non-template function
    ..\Matrix.h:67: warning: friend declaration `std:stream&
    operator<<(std:stream&, matrix<T>&)' declares a non-template function
    ..\Matrix.h:210: error: `bool matrix<T>:perator==(const matrix<T>&,
    const matrix<T>&)' must take exactly one argument
    ..\Matrix.h:210: error: no `bool matrix<T>:perator==(const
    matrix<T>&, const matrix<T>&)' member function declared in class `matrix<T>'
    ..\Matrix.h:210: error: template definition of non-template `bool
    matrix<T>:perator==(const matrix<T>&, const matrix<T>&)'

    Matrice.exe - 3 error(s), 11 warning(s)

    grazie in anticipo!

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Magari, se facessi vedere il codice ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2008
    Messaggi
    30
    riga 45
    friend bool operator == (const Matrix& m1, const Matrix& m2); //dichiarazione

    riga 46
    friend bool operator != (const Matrix& m1, const Matrix& m2); //dichiarazione

    riga 58
    friend Matrix operator + (const Matrix& m1, const Matrix& m2); //

    riga 210
    MAT_TEMPLATE inline bool
    Matrix:perator == (const Matrix& m1, const Matrix& m2)
    {
    bool retVal = false;

    if (m1.Rig != m2.Rig || m1.Col != m2.Col)
    return retVal;

    for (NEWINT i=0; i < m1.Row; i++)
    for (NEWINT j=0; j < m1.Col; i++)
    if (m1.Val[i][j] != m2.Val[i][j])
    return retVal;

    return true;
    }

    praticamente mi da i warning sulle friend e gli errori su questo template....

    ringrazio di nuovo

  4. #4
    Originariamente inviato da zappeis
    riga 45
    friend bool operator == (const Matrix& m1, const Matrix& m2); //dichiarazione

    riga 46
    friend bool operator != (const Matrix& m1, const Matrix& m2); //dichiarazione

    riga 58
    friend Matrix operator + (const Matrix& m1, const Matrix& m2); //

    riga 210
    MAT_TEMPLATE inline bool
    Matrix:perator == (const Matrix& m1, const Matrix& m2)
    {
    bool retVal = false;

    if (m1.Rig != m2.Rig || m1.Col != m2.Col)
    return retVal;

    for (NEWINT i=0; i < m1.Row; i++)
    for (NEWINT j=0; j < m1.Col; i++)
    if (m1.Val[i][j] != m2.Val[i][j])
    return retVal;

    return true;
    }

    praticamente mi da i warning sulle friend e gli errori su questo template....

    ringrazio di nuovo
    Difficile diagnosticare il problema: che cos'e' MAT_TEMPLATE?
    Provando ad indovinare che sia un qualcosa di simile a:
    Codice PHP:
    template <typename T
    allora come minimo devi scrivere un qualcosa del genere:
    Codice PHP:
    template <typename T>
    bool
    Matrix 
    <T>::operator == 

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2008
    Messaggi
    30
    grazie per la risposta...
    all'inizio del file header avevo scritto

    #if !defined(_NO_TEMPLATE)
    # define MAT_TEMPLATE template <class T>
    # define Matrix matrix<T>
    #else
    # define MAT_TEMPLATE
    # define Matrix matrix
    # ifdef MATRIX_TYPE
    typedef MATRIX_TYPE T;
    # else
    typedef double T;
    # endif
    #endif

    grazie ancora

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2008
    Messaggi
    30
    risolto... praticamente mi ero dichiarato delle funzioni template friend quando non dovevo dichiararle ma solamente implementarle....

    grazie

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.