Ciao a tutti, il mio problema è molto semplice:
In Xcode, sto facendo un progetto per l'università, in c++, e ho diviso il programma nel classico MAIN.CPP, HEADER.H, FUNZIONI.CPP. Ora, non mi da errori sintattici, ma a run del programma succede che le funzioni non le trova, dicendomi che nel file .o del main non ci sono. Vi scrivo il codice così, potete avere un'idea. 
//MAIN
#include "MatriceT.h"
int main(int argc, const char * argv[])
{
    Matrice<int,5> M1(2,3);
    
    Matrice<double,6> M2(1,4);
    
    M1.AcquisciMatrice();
    
    M2.AcquisciMatrice();
    
    /*for(i=0;i<M1.getrighe();i++){
        for(j=0;j<M1.getcolonne();j++)
            cout<<i<<","<<j<<":"<<M1.leggimatrice(i,j)<<" ";
        cout<<endl;
    }*/
    
    return 0;
}
//MatriceT.h
#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;
typedef int indice;
template<class T,int max>class Matrice
{
    
    public:
    typedef T tipoelem;
    Matrice(indice,indice);
    ~Matrice();
    
    
    void AcquisciMatrice();
    
    void setrighe(indice);
    void setcolonne(indice);
    indice getrighe();
    indice getcolonne();
    
    //tipoelem leggimatrice(indice,indice);
    void scrivimatrice(indice,indice,tipoelem);
    
    private:
    bool controlloindice(indice);
    bool controllocasella(indice,indice);
    indice righe;
    indice colonne;
    tipoelem **Mat;
    
    
};
//MatriceT.cpp
#include "MatriceT.h"
template <class T,int max> Matrice<T,max>::Matrice(indice r,indice c)
{
    int i;
    righe=r;
    colonne=c;
    Mat= new tipoelem* [r];
    for(i=0;i<righe;i++)
        Mat=new tipoelem [c];
    
}
template <class T,int max> Matrice<T,max>::~Matrice()
{
    delete Mat;
}
template <class T,int max> void Matrice <T,max>::setrighe(indice r)
{
    if(controlloindice(r))
        righe=r;
    else
        righe=max;
}
template <class T,int max> void Matrice <T,max>::setcolonne(indice c)
{
    if(controlloindice(c))
        colonne=c;
    else
        colonne=max;
}
template <class T,int max> indice Matrice <T,max>::getrighe()
{
    return righe;
}
template <class T,int max> indice Matrice <T,max>::getcolonne()
{
    return colonne;
}
template <class T,int max> void Matrice <T,max>::scrivimatrice(indice r,indice c,tipoelem a)
{
    if(controllocasella(r,c))
        Mat[r][c]=a;
}
/*template <class T,int max> tipoelem Matrice<T,max>::leggimatrice(indice r,indice c)
{
    if(controllocasella(r,c))
        return Mat[r][c];
}*/
template <class T,int max> bool Matrice<T,max>::controllocasella(indice i,indice j)
{
    if(i>max || j>max)
        return false;
    else
        return true;
}
template <class T,int max> bool Matrice<T,max>::controlloindice(indice i)
{
    if(i>max)
        return false;
    else return true;
}
template <class T,int max> void Matrice<T,max>::AcquisciMatrice()
{
    int i,j;
    tipoelem app;
    
    for(i=0;i<getrighe();i++)
        for(j=0;j<getcolonne();j++){
            cout<<"Elemento["<<i<<"]["<<j<<"]:";
            cin>>app;
            scrivimatrice(i,j,app);
        }
}
Sinceramente, so che c'è un problema in stack, perché viene compilato prima il main, quindi avrei bisogno di capire come fare.
GRAZIE PER L'ATTENZIONE.
Spero in una soluzione