elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: (TUTORIAL) Aprende a emular Sentinel Dongle By Yapis


  Mostrar Mensajes
Páginas: 1 2 3 4 5 6 7 [8] 9 10 11 12 13 14 15 16
71  Programación / Programación C/C++ / Re: Problema manejo de Pila en: 13 Febrero 2014, 00:56 am
Logre acomodarlo de forma que ahora si cumple su cometido, aunque buscare maneras mas eficientes de trabajarlo, estas son las 2 funciones que modifique:

Código
  1. int borrarTope( Pila *miPila )
  2. {
  3.    Nodo *nodo;
  4.    int valor;
  5.  
  6.    if( miPila->ultimo == miPila->primero )
  7.    {
  8.        valor = miPila->ultimo->num;
  9.        free( miPila->ultimo );
  10.        miPila->primero = NULL;
  11.        miPila->ultimo = NULL;
  12.    }
  13.    else
  14.    {
  15.        nodo = miPila->primero;
  16.  
  17.        while( nodo->sig != miPila->ultimo )
  18.            nodo = nodo->sig;
  19.  
  20.        valor = miPila->ultimo->num;
  21.        free( miPila->ultimo );
  22.        miPila->ultimo = nodo;
  23.        miPila->ultimo->sig = NULL;
  24.    }
  25.  
  26.    return valor;
  27. }
  28.  
  29. void borrarTodo( Pila *miPila )
  30. {
  31.    while( miPila->primero != NULL )
  32.    {
  33.        Nodo *nodo;
  34.        nodo = miPila->primero;
  35.        miPila->primero = miPila->primero->sig;
  36.        free(nodo);
  37.    }
  38. }
  39.  

De todas maneras, gracias por haberte tomado la molestia  :)

Ahora entiendo por que haces el while en borrarTope, tienes los punteros invertidos. Si inviertes la dirección de los punteros, obtendrás una clase pila mucho más eficiente. Sigo pensando que deberías mirarte el enlace, ya que tienes mal planteada la pila.

Saludos
72  Programación / Programación C/C++ / Re: Problema manejo de Pila en: 13 Febrero 2014, 00:37 am
Gracias por el link, me pondre a leerlo, es solo que segun lei, en una pila se extrae el ultimo valor ingresado, y la solucion que me colocaste es para eliminar un elemento de una cola.

EDIT: Es decir mi puntero de nodo lo corro mientras su elemento puntero "sig" sea distinto a la ultima posicion para liberar la ultima posicion y luego hacer esa ultima posicion igual al mi puntero nodo. Pero cuando trato de mostrar despues la pila resultante, me empieza a mostrar valores locos.

El código que te he puesto hace la función POP, que es la que se encarga de eliminar el elemento superior de una pila.
Además, veo distintos errores en varias de las funciones que has programado, como por ejemplo en la función resetPila, que no te encargas de liberar la memoria de los diferentes nodos antes de perder las direcciones de memoria del primer y ultimo nodo. Tampoco te hace falta un puntero hacia el último elemento de la pila, ya que no vas a usarlo para nada (Recordemos que una pila es Last In First Out).
Mírate la clase Stack (Pila) del enlace que te he pasado, yo creo que te ayudará a entender mejor como funcionan las clases pila y cola, y si tienes alguna duda coméntalo y intentaré resolvértela.

Saludos
73  Programación / Programación C/C++ / Re: Consulta sobre bucles, timers y multithreading. en: 13 Febrero 2014, 00:27 am
Pues me pondré a ello, muchas gracias! ^^
74  Programación / Programación C/C++ / Re: Problema manejo de Pila en: 13 Febrero 2014, 00:01 am
No entiendo que haces en la función borrarTope. Para eliminar el primer elemento de la pila lo único que has de hacer es:
Código:
if(miPila->primero == miPila->ultimo)
{
  free(miPila->primero);
  miPila->primero = NULL;
  miPila->segundo = NULL;
}
else
{
  Nodo* nodo = miPila->primero;
  miPila->primero = miPila->primero->sig;
  free(nodo);
}

En cualquier caso, te recomiendo crear una clase pila y añadirle un parámetro int con el tamaño de la pila, que irías actualizando según añades o eliminas un elemento de la cola.

EDITO: Te añado un enlace hacia un aporte de hace unos meses en el que publiqué las clases pila y cola implementadas por mi. No serán las clases más eficientes que veas, pero te pueden servir para hacerte una idea. Enlace: http://foro.elhacker.net/programacion_cc/aporte_c_clases_pila_y_cola-t405322.0.html;msg1906527#msg1906527
75  Programación / Programación C/C++ / Consulta sobre bucles, timers y multithreading. en: 12 Febrero 2014, 23:16 pm
Buenas noches.
Estoy desarrollando una DLL para hookear una serie de procesos de una aplicación conectada a un servidor (es un cliente en lo que seria una conexión cliente-servidor). Pues bien, el hecho es que estoy controlando los paquetes que entran y salen mediante esta DLL y he implementado una pequeña función que envía paquetes legítimos a través del propio cliente.
El problema que tengo es que hay una serie de paquetes que necesitan una cierta diferencia de tiempo entre ellos, pero no puedo congelar la aplicación mientras espero ese tiempo (Por lo tanto, Sleep() y cualquier bucle que congele la aplicación quedan descartados), por lo que me estoy planteando utilizar multithreading, pero antes quería preguntaros si se os ocurre alguna otra forma de hacer esto. ¿Quizás una cola de paquetes y alguna manera de controlar cuándo se mandan a la función SendPacket?

Gracias :)
76  Programación / Programación C/C++ / Re: Programacion c++ menu de opciones ¡AYUDA! en: 3 Enero 2014, 13:36 pm
¿Que es lo que no te sale? ¿Que has hecho hasta ahora? Nosotros no te vamos a hacer los deberes, si quieres que se te ayude muéstranos el trabajo que lleves hecho hasta ahora y nosotros intentaremos guiarte para que lo termines por ti mismo.

Saludos
77  Programación / Programación C/C++ / Aporte C++ - Clases Pila y Cola. en: 21 Diciembre 2013, 17:52 pm
He desarrollado una clase Pila y una Clase cola para estudiar de cara a la universidad y se me ha ocurrido publicarla aquí, ya que estoy viendo publicaciones en las que se hacen preguntas sobre la implementación de estas clases y podrían ayudar a más de uno. Si alguien encuentra algún error que lo comente, por favor.

Aquí los archivos:

Stack.h
Código
  1. #include <cstddef>
  2.  
  3. template <class T>
  4. class Stack
  5. {
  6.  private:
  7.    struct Node
  8.    {
  9.      Node* nextNode;
  10.      T data;
  11.    };
  12.  
  13.    Node* topNode = NULL;
  14.    int dataSize = 0;
  15.  
  16.    static Node* copyNode(Node* node)
  17.    {
  18.      Node* newNode = NULL;
  19.      if (node)
  20.      {
  21. newNode = new Node;
  22. newNode->data = node->data;
  23. newNode->nextNode = copy(node->nextNode);
  24.      }
  25.      return newNode;
  26.    }
  27.    static void deleteNode(Node* node)
  28.    {
  29.      if (node)
  30.      {
  31. deleteNode(node->nextNode);
  32. delete node;
  33.      }
  34.    }
  35.  
  36.  public:
  37.    Stack();
  38.    Stack(const Stack& original);
  39.    ~Stack();
  40.  
  41.    T top() const;
  42.    bool empty() const;
  43.    int size() const;
  44.  
  45.    void push(const T& data);
  46.    void pop();
  47.    void clear();
  48.  
  49.    Stack& operator =(const Stack& original);
  50. };
  51.  
  52. template <class T>
  53. Stack<T>::Stack() {}
  54.  
  55. template <class T>
  56. Stack<T>::Stack(const Stack &original)
  57. {
  58.  if (this != &original)
  59.  {
  60.    dataSize = original.dataSize;
  61.    topNode = copy(original.topNode);
  62.  }
  63. }
  64.  
  65. template <class T>
  66. Stack<T>::~Stack()
  67. {
  68.  deleteNode(this->topNode);
  69. }
  70.  
  71. template <class T>
  72. Stack<T>& Stack<T>::operator =(const Stack& original)
  73. {
  74.  if (this != &original)
  75.  {
  76.    dataSize = original.dataSize;
  77.    deleteNode(topNode);
  78.    topNode = copyNode(original.topNode);
  79.  }
  80.  return *this;
  81. }
  82.  
  83. template <class T>
  84. T Stack<T>::top() const
  85. {
  86.  return topNode->data;
  87. }
  88.  
  89. template <class T>
  90. void Stack<T>::push(const T& data)
  91. {
  92.  Node* newTop = new Node;
  93.  newTop->data = data;
  94.  newTop->nextNode = topNode;
  95.  topNode = newTop;
  96.  
  97.  dataSize = dataSize + 1;
  98. }
  99.  
  100. template <class T>
  101. void Stack<T>::pop()
  102. {  
  103.  Node* auxNode = topNode;
  104.  topNode = topNode->nextNode;
  105.  delete auxNode;
  106.  
  107.  dataSize = dataSize - 1;
  108. }
  109.  
  110. template <class T>
  111. bool Stack<T>::empty() const
  112. {
  113.  return (topNode == NULL);
  114. }
  115.  
  116. template <class T>
  117. int Stack<T>::size() const
  118. {
  119.  return dataSize;
  120. }
  121.  
  122. template <class T>
  123. void Stack<T>::clear()
  124. {
  125.  deleteNode(topNode);
  126.  topNode = NULL;
  127.  dataSize = 0;
  128. }

Queue.h
Código
  1. #include <cstddef>
  2.  
  3. template <class T>
  4. class Queue
  5. {
  6.  private:
  7.    struct Node
  8.    {
  9.      T data;
  10.      Node* prevNode;
  11.    };
  12.  
  13.    int dataSize;
  14.    Node* frontNode;
  15.    Node* lastNode;
  16.  
  17.    static Node* copyNode(Node* node, Node* last)
  18.    {
  19.      Node* newNode = NULL;
  20.      if(node)
  21.      {
  22. newNode = new Node;
  23. newNode->data = node->data;
  24. newNode->prevNode = copyNode(node->prevNode);
  25. if (newNode->nextNode == NULL) last = newNode;
  26.      }
  27.      return newNode;
  28.    }
  29.  
  30.    static void deleteNode(Node* node)
  31.    {
  32.      if(node)
  33.      {
  34. deleteNode(node->prevNode);
  35. delete node;
  36.      }
  37.    }
  38.  
  39.  public:
  40.    Queue();
  41.    Queue(const Queue& original);
  42.    ~Queue();
  43.  
  44.    T front() const;
  45.    bool empty() const;
  46.    int size() const;
  47.  
  48.    void push(const T &data);
  49.    void pop();
  50.    void clear();
  51.  
  52.    Queue& operator =(const Queue& original);
  53. };
  54.  
  55. template <class T>
  56. Queue<T>::Queue()
  57. {
  58.  dataSize = 0;
  59.  frontNode = NULL;
  60.  lastNode = NULL;
  61. }
  62.  
  63. template <class T>
  64. Queue<T>::Queue(const Queue& original)
  65. {
  66.  if (this != &original)
  67.  {
  68.    dataSize = original.dataSize;
  69.    frontNode = copyNode(original.frontNode);
  70.  }
  71. }
  72.  
  73. template <class T>
  74. Queue<T>::~Queue()
  75. {
  76.  deleteNode(frontNode);
  77. }
  78.  
  79. template <class T>
  80. T Queue<T>::front() const
  81. {
  82.  return frontNode->data;
  83. }
  84.  
  85. template <class T>
  86. bool Queue<T>::empty() const
  87. {
  88.  return (frontNode == NULL);
  89. }
  90.  
  91. template <class T>
  92. int Queue<T>::size() const
  93. {
  94.  return dataSize;
  95. }
  96.  
  97. template <class T>
  98. void Queue<T>::push(const T &data)
  99. {
  100.  Node* newNode = new Node;
  101.  newNode->data = data;
  102.  newNode->prevNode = NULL;
  103.  if (!frontNode) frontNode = newNode;
  104.  else lastNode->prevNode = newNode;
  105.  lastNode = newNode;
  106.  
  107.  dataSize = dataSize + 1;
  108. }
  109.  
  110. template <class T>
  111. void Queue<T>::pop()
  112. {
  113.  Node* aux = frontNode;
  114.  frontNode = frontNode->prevNode;
  115.  delete aux;
  116.  
  117.  dataSize = dataSize - 1;
  118. }
  119.  
  120. template <class T>
  121. void Queue<T>::clear()
  122. {
  123.  deleteNode(frontNode);
  124.  frontNode = NULL;
  125.  lastNode = NULL;
  126.  dataSize = 0;
  127. }
  128.  
  129. template <class T>
  130. Queue<T>& Queue<T>::operator =(const Queue& original)
  131. {
  132.  if (this != &original)
  133.  {
  134.    dataSize = original.dataSize;
  135.    deleteNode(frontNode);
  136.    frontNode = copyNode(original.frontNode);
  137.  }
  138.  return *this;
  139. }

Saludos.
78  Programación / Programación C/C++ / Re: [AYUDA] FUNCIONES GLOBALES CLASS en: 20 Diciembre 2013, 17:37 pm
Al usar templates has de incluir la implementación desde la cabecera de la clase añadiendo #include "tu_cpp.cpp" al final de tu archivo de cabecera.
Otra opción es la de tener la cabecera y la implementación en el mismo fichero, pero no lo recomiendo si el código es muy extenso.

Saludos
79  Programación / Programación C/C++ / Re: C++ - Problema con operador delete en: 19 Diciembre 2013, 14:15 pm
Pues creo que voy a hacer lo que me ha dicho mi profesor, pondré las sobrecargas como miembros de la clase y aprovecharé para declararlas constantes.

En cuanto tenga una versión presentable la subo para que la veáis ^^

Gracias por la ayuda!

EDITO:

Ya he conseguido implementar la clase con templates. Os añado el código y a continuación os explico un poco que he hecho/modificado para que me funcione.

Matriz.h
Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. /*ostream y iostream no son templates, no entienden los cast dinámicos que se hacen con un template,
  6.  *es por esto que se necesita redefinir la clase y el método antes que el template, para convertirlo en template
  7.  *http://www.elrincondelc.com/nuevorincon/foros/viewtopic.php?t=13415&view=next&sid=02c39e45352bd867b56de65ebb1afd22
  8.  */
  9. template <class T> class Matriz;
  10. template <class T> ostream& operator <<(ostream &salida, const Matriz<T> &mat);
  11. template <class T> istream& operator >>(istream &entrada, Matriz<T> &mat);
  12. /* --- */
  13.  
  14. template <class T> class Matriz {
  15.  
  16. private:
  17.  
  18.  int nfilas;
  19.  int ncolumnas;
  20.  T **matr = NULL;
  21.  
  22.  void borrar();
  23.  
  24. public:
  25.  
  26.  //Constructora
  27.  Matriz(int filas, int columnas);
  28.  
  29.  //Constructora-copiadora
  30.  Matriz(const Matriz& m);
  31.  
  32.  //Destructora
  33.  ~Matriz();
  34.  
  35.  //Consultoras
  36.  int filas() const;
  37.  int columnas() const;
  38.  T consultar(int fila, int columna) const;
  39.  
  40.  //Modificadora
  41.  void modificar(int fila, int columna, T x);
  42.  
  43.  //Operadores
  44.  Matriz<T>& operator =(const Matriz &b);
  45.  
  46.  void operator +=(const Matriz &mat);
  47.  void operator -=(const Matriz &mat);
  48.  
  49.  Matriz<T> operator +(const Matriz &b) const;
  50.  Matriz<T> operator -(const Matriz &b) const;
  51.  Matriz<T> operator *(const Matriz &b) const;
  52.  
  53.  Matriz<T> operator *(int b) const;
  54. //Matriz<T> operator *(int a, const Matriz &b); Está declarada como pública y externa a la clase
  55.  
  56.  bool operator ==(const Matriz &b) const;
  57.  bool operator !=(const Matriz &b) const;
  58.  
  59.  friend ostream& operator << <>(ostream &salida, const Matriz<T> &mat);
  60.  friend istream& operator >> <>(istream &entrada, Matriz<T> &mat);
  61. };
  62.  
  63. template <class T>
  64. Matriz<T>::Matriz(int filas = 0, int columnas = 0) : nfilas(filas), ncolumnas(columnas)
  65. {
  66.  if (nfilas > 0 and ncolumnas > 0)
  67.  {
  68.    matr = new T* [filas];
  69.    for (int i = 0; i < filas; ++i) matr[i] = new T [columnas];
  70.  }
  71. }
  72.  
  73. template <class T>
  74. Matriz<T>::Matriz(const Matriz &m)
  75. {
  76.  *this = m;
  77. }
  78.  
  79. template <class T>
  80. Matriz<T>::~Matriz()
  81. {
  82.  borrar();
  83. }
  84.  
  85. template <class T>
  86. void Matriz<T>::borrar()
  87. {
  88.  if (this->matr != NULL)
  89.  {
  90.    for (int i = 0; i < nfilas; ++i) delete[] matr[i];
  91.    delete[] matr;
  92.    matr = NULL;
  93.  }
  94. }
  95.  
  96. template <class T>
  97. int Matriz<T>::filas() const
  98. {
  99.  return nfilas;
  100. }
  101.  
  102. template <class T>
  103. int Matriz<T>::columnas() const
  104. {
  105.  return ncolumnas;
  106. }
  107.  
  108. template <class T>
  109. T Matriz<T>::consultar(int fila, int columna) const
  110. {
  111.  return matr[fila][columna];
  112. }
  113.  
  114. template <class T>
  115. void Matriz<T>::modificar(int fila, int columna, T x)
  116. {
  117.  matr[fila][columna] = x;
  118. }
  119.  
  120. template <class T>
  121. Matriz<T>& Matriz<T>::operator =(const Matriz &mat)
  122. {
  123.  if (this != &mat)
  124.  {
  125.    this->borrar();
  126.  
  127.    if (mat.matr)
  128.    {
  129.      this->nfilas = mat.nfilas;
  130.      this->ncolumnas = mat.ncolumnas;
  131.  
  132.      this->matr = new T* [nfilas];
  133.      for (int i = 0; i < nfilas; ++i)
  134.        this->matr[i] = new T [ncolumnas];
  135.  
  136.      for (int i = 0; i < nfilas; ++i)
  137.      {
  138.        for (int j = 0; j < ncolumnas; ++j)
  139.          this->matr[i][j] = mat.matr[i][j];
  140.      }
  141.    }
  142.  }
  143.  return *this;
  144. }
  145.  
  146. template <class T>
  147. void Matriz<T>::operator +=(const Matriz &mat)
  148. {
  149.  if (this->nfilas != 0 and this->ncolumnas != 0 and mat.nfilas != 0 and mat.ncolumnas != 0)
  150.  {
  151.    for (int i = 0; i < nfilas; ++i)
  152.      for (int j = 0; j < ncolumnas; ++j)
  153.        this->matr[i][j] += mat.matr[i][j];
  154.  }
  155. }
  156.  
  157. template <class T>
  158. void Matriz<T>::operator -=(const Matriz &mat)
  159. {
  160.  if (this->nfilas != 0 and this->ncolumnas != 0 and mat.nfilas != 0 and mat.ncolumnas != 0)
  161.  {
  162.    for (int i = 0; i < nfilas; ++i)
  163.      for (int j = 0; j < ncolumnas; ++j)
  164.        this->matr[i][j] -= mat.matr[i][j];
  165.  }
  166. }
  167.  
  168. template <class T>
  169. Matriz<T> Matriz<T>::operator +(const Matriz &b) const
  170. {
  171.  int filas = this->nfilas;
  172.  int columnas = this->ncolumnas;
  173.  
  174.  Matriz<T> res(filas, columnas);
  175.  
  176.  for (int i = 0; i < filas; ++i)
  177.    for (int j = 0; j < columnas; ++j)
  178.      res.matr[i][j] = this->matr[i][j] + b.matr[i][j];
  179.  
  180.  return res;
  181. }
  182.  
  183. template <class T>
  184. Matriz<T> Matriz<T>::operator -(const Matriz &b) const
  185. {
  186.  int filas = this->nfilas;
  187.  int columnas = this->ncolumnas;
  188.  
  189.  Matriz<T> res(filas, columnas);
  190.  
  191.  for (int i = 0; i < filas; ++i)
  192.    for (int j = 0; j < columnas; ++j)
  193.      res.matr[i][j] = this->matr[i][j] - b.matr[i][j];
  194.  
  195.  return res;
  196. }
  197.  
  198. template <class T>
  199. Matriz<T> Matriz<T>::operator *(const Matriz &b) const
  200. {
  201.  if (this->ncolumnas == b.nfilas)
  202.  {
  203.    int pos = this->ncolumnas;
  204.  
  205.    int filas = this->nfilas;
  206.    int columnas = b.ncolumnas;
  207.  
  208.    Matriz<T> res(filas, columnas);
  209.    for (int i = 0; i < filas; ++i)
  210.    {
  211.      for (int j = 0; j < columnas; ++j)
  212.      {
  213.        T value = 0;
  214.        for (int k = 0; k < pos; ++k) value += this->matr[i][k] * b.matr[k][j];
  215.        res.matr[i][j] = value;
  216.      }
  217.    }
  218.    return res;
  219.  }
  220. }
  221.  
  222. template <class T>
  223. Matriz<T> Matriz<T>::operator *(int b) const
  224. {
  225.  int filas = this->nfilas;
  226.  int columnas = this->ncolumnas;
  227.  
  228.  Matriz res(filas, columnas);
  229.  for (int i = 0; i < filas; ++i)
  230.    for (int j = 0; j < columnas; ++j) res.matr[i][j] = this->matr[i][j] * b;
  231.  
  232.  return res;
  233. }
  234.  
  235. template <class T>
  236. Matriz<T> operator *(int a, const Matriz<T> &b)
  237. {
  238.  return b*a;
  239. }
  240.  
  241. template <class T>
  242. bool Matriz<T>::operator ==(const Matriz &b) const
  243. {
  244.  if (this->nfilas != b.nfilas or this->ncolumnas != b.ncolumnas) return false;
  245.  for (int i = 0; i < this->nfilas; ++i)
  246.    for (int j = 0; j < this->ncolumnas; ++j)
  247.      if (this->matr[i][j] != b.matr[i][j]) return false;
  248.  
  249.  return true;
  250. }
  251.  
  252. template <class T>
  253. bool Matriz<T>::operator !=(const Matriz<T> &b) const
  254. {
  255.  if (this->nfilas != b.nfilas or this->ncolumnas != b.ncolumnas) return true;
  256.  for (int i = 0; i < this->nfilas; ++i)
  257.    for (int j = 0; j < this->ncolumnas; ++j)
  258.      if (this->matr[i][j] != b.matr[i][j]) return true;
  259.  
  260.  return false;
  261. }
  262.  
  263. template <class T>
  264. ostream& operator <<(ostream &salida, const Matriz<T> &mat)
  265. {
  266.  for (int i = 0; i < mat.nfilas; ++i)
  267.  {
  268.    for (int j = 0; j < mat.ncolumnas; ++j) salida << mat.matr[i][j] << " ";
  269.    salida << endl;
  270.  }
  271.  return salida;
  272. }
  273.  
  274. template <class T>
  275. istream& operator >>(istream &entrada, Matriz<T> &mat)
  276. {
  277.  for (int i = 0; i < mat.nfilas; ++i)
  278.    for (int j = 0; j < mat.ncolumnas; ++j) entrada >> mat.matr[i][j];
  279.  return entrada;
  280. }

Pues bien, como podéis comprobar he arreglado el problema que tenia con las funciones friend y los templates implementando las sobrecargas como métodos de la clase y añadiendo una pre-especificación que está comentada con un enlace, dónde se explica la solución al error de las sobrecargas de iostream (parece que el problema venía por temas internos de la clase iostream que no interpretaba bien operaciones internas de los templates). La sobrecarga del operador de un entero por una matriz he tenido que declararlo como externo a la clase, ya que si se declara como método cogerá el parámetro implícito como primer parámetro de la operación.

El resto de cambios son por la implementación de los templates.

Si alguien tiene alguna duda o sugerencia, será bienvenida ^^

Saludos y gracias amchacon por toda la ayuda!

PD: Iré mejorando la clase, como ya dije quiero implementar Gauss y varias cosas más, pero de momento voy a centrarme en el estudio de punteros que para mitades de enero tengo el examen final de programación y quiero mi matricula  ;-)
80  Programación / Programación C/C++ / Re: C++ - Problema con operador delete en: 17 Diciembre 2013, 22:11 pm
La implementación no coindice con la declaración en la clase (Matriz != Matriz<T>).
No se a que te refieres exactamente... ¿Dices que en la declaración en la clase de las funciones amigas, he puesto Matriz en vez de Matriz<T>? Aunque lo cambie sigo teniendo el mismo problema :S
Creo que el compilador está dejando de mostrarme errores a partir de que encuentra ese, porque ayer ya estuve corrigiendo varias malas implementaciones del template y el compilador no se quejaba.  :silbar:

De todas formas, hoy le he preguntado a mi profesor de programación de la universidad sobre esto, y me ha dicho que si podía implementarlo como miembro de la clase y aplicarle la etiqueta const hasta ganaría eficiencia, ya que el compilador ya trabajaría de manera distinta que si no fuera una función constante. También me ha dicho que no desarrolla una clase y implementa sobrecargas de operadores y funciones amigas desde hace varios años, por lo que los métodos pueden haber cambiado. ¿Que opináis sobre esto?
Páginas: 1 2 3 4 5 6 7 [8] 9 10 11 12 13 14 15 16
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines