Problema al crear Matriz tridimensional en C++

Peinacabras

Aquí el constructor.

template <class T, int N>
Matriz3D<T, N>::Matriz3D(){
    
mat = new T**[N]; for(unsigned i=0; i<N; i++){ mat[i] = new T*[N]; for(unsigned j=0; j<N; j++){ mat[i][j] = new T[N]; for(unsigned k=0; k<N; k++) mat[i][j][k] = NULL; } } }

Declaracion de la clase(La matriz es cubica, mismo tamaño para i, j,k)

template <class T,int N>
class Matriz3D{
    T ***mat;
public:
    Matriz3D();
    Matriz3D(const Matriz3D<T,N>& orig);
    T &operator()(unsigned i, unsigned j, unsigned k);
    Matriz3D<T,N> &operator=(const Matriz3D<T,N> &orig);
    ~Matriz3D();
    
};

Y mi declaración en el main

Matriz3D<Particula*, 100> mt;

Me tira fallos rarisimos, ¿Veis algún fallo en algún lado?

r2d2rigo

A lo mejor si pones alguno de esos "fallos rarisimos" te podemos ayudar mejor, que no somos adivinos.

Peinacabras

Undefined symbols for architecture x86_64:
"Matriz3D<Particula, 100>::Matriz3D()", referenced from:
_main in main.o
"Matriz3D<Particula
, 100>::Matriz3D()", referenced from:
_main in main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

r2d2rigo

Me da que no estas linkando el main.o con el Matriz3D.o o como se llame el fichero al que compilas.

EDIT: no estaras usando gcc, no?

1 respuesta
elkaoD

#4 está usando LLVM (fíjate que falla clang).

Pero debería usar clang++ o el flag "-x c++".

Faltan datos. #1, ¿por qué no pasteas todo el output del proceso de build en www.refheap.com ?

1 respuesta
r2d2rigo

#5 por eso lo digo, buscando el error lo maximo que he encontrado ha sido un post de SO donde dicen que esta usando gcc en lugar de g++ y por eso no le linka las clases.

1 respuesta
elkaoD

#6 gcc != llvm. A saber qué está ocurriendo en realidad.

A saber, ¿cómo está buildeando? No es lo mismo usar un IDE que tu propio Makefile.

Y sobre todo, ¿por qué llvm en lugar de gcc?

Usuarios habituales

  • elkaoD
  • r2d2rigo
  • Peinacabras