Buenas, al compilar un programa obtengo estos errores:
In file included from src/matriz_basico.cpp:9:
include/matriz_basico.h:30: error: new types may not be defined in a return type
include/matriz_basico.h:30: note: (perhaps a semicolon is missing after the definition of ‘matriz’)
include/matriz_basico.h:30: error: two or more data types in declaration of ‘CrearMatriz’
src/matriz_basico.cpp:19: error: expected constructor, destructor, or type conversion before ‘buscar’
el archivo matriz_ basico.h es( la linea 30 es: void CrearMatriz(matriz& m,int f,int c);) :
struct elemento{
   char c;
   elemento *sig;
};
struct registro{
   registro *sig;
   elemento *c_ele;
};
struct matriz{
   int filas,columnas;
   registro *sig;
}
/**
  * @brief Crea un tipo de dato Matriz
  * @param m Crea la estructura interna del tipo de dato matriz.
  * @param f Nº de filas con la que se creara la matriz
  * @param c Nº de columnas con la que se creara la matriz
  * @pre f y c deben de ser positivos
  */
void CrearMatriz(matriz& m,int f,int c);
....
Y matriz_basico.cpp es:
....
void CrearMatriz(matriz& m,int f,int c){
   if(f>0 &&  c>0 && m==0){//Probamos que no sean nº negativos ¿y que la matriz no este inicializada ya con otros valores.?
      m.filas=f;//Guardamos el nº de filas y columnas
      m.columnas=c;
      registro *p_reg1=m.sig=new registro;//Empezamos a crear la estructura de la matriz
      elemento *p_ele;
      for(int i=0;i<f;i++){//Creamos los registros que se necesitan para hacer la matriz indicada
         p_ele=p_reg1->c_ele=new elemento;
         for(int j=1;i<c;i++){//Creamos los elementos que se necesitan para hacer la matriz indicada
            p_ele->sig=new elemento;
            p_ele=p_ele1->sig;
            p_ele->sig=NULL;
         }
      p_reg->sig=new registro;
      p_reg=p_reg->sig;
      p_reg->sig=NULL;//Los valores NULL indican que ya no hay mas datos enlazados.
      }
   }
}
.....
¿Porque obtengo esos errores de compilacion?
Ademas de esos errores de compilación en ese programa tambien tengo otros errores de compilación en este programa:
cadenas.h
#ifndef CADENAS_H_
#define CADENAS_H_
struct Cadenas{
   char **cad;
   int n;
   int n_usados;
};
/**
  * @brief Creamos el TDA. Por defecto crea un vector de 5 cadenas;
  * @param c , TDA sobre el que se va a inicializar
  * @pre c ha debido ser creado con anterioridad.
*/
void CrearCadenas(Cadenas& c); 
/**
  * @brief Indica el tamaño de la cadena
  * @param m  Cadena sobre la cual se va a conocer el tamaño
  * @pre La cadena tiene que haber sido creada 
  * @return Devuelve el numero de cadenas dentro del TDA
*/
int SizeCadenas(const Cadenas& c);
/**
  * @brief Añade una cadena al TDA
  * @param c TDA sobre la cual se va insertar una nueva cadena
  * @param nueva  cadena que se va insertar en el TDA
  * @pre nueva no puede estar vacia;c debe de existir
*/
void AddCadenas(Cadenas& c, const char *nueva); 
/**
  * @brief Indica el tamaño de una cadena del TDA
  * @param m TDA sobre el cual se va realizar la consulta
  * @param i numero de cadena que se va conocer el tamaño
  * @pre i debe ser mayor que 0 y ser igual o menor que el número de cadenas usadas,m 
  * @return devuelve el tamaño de una cadena. En caso de que no cumpla con los pre devolvera un numero<0
*/
int LenCadenas(const Cadenas& m, int i);
/**
  * @brief Averiguamos la cadena contenida en una posicion del TDA
  * @param m TDA sobre el cuál vamos a realizar la consulta
  * @param i Posicion de la cadena dentro del TDA
  * @param out Extrae la cadena
  * @pre i debe de ser mayor que 0 y ser igual o menor que el numero de cadenas usadas; out debe de existir.
*/
void GetCadenas (const Cadenas& m, int i, char *out);
/**
  * @brief Elimina toda el TDA, liberando memoria
  * @param m TDA que va a ser destruido
  * @pre m debe de existir
*/
void DestruirCadenas(Cadenas& m);
#endif
y cadenas.cpp
#include <iostream>
#include "cadenas.h"
using namespace std;
void CrearCadenas(Cadenas& c){
   c.n=5;//Por defecto pordemos almacenar 5 cadenas
   c.n_usados=0;
   c.cad=new char*[c.n];//Reservamos espacio para 5 cadenas
}
int SizeCadenas(const Cadenas& c){
   return c.n;
}
void AddCadenas(Cadenas& c, const char *nueva){
   if(c.n-c.n_usados>0){//Tenemos espacio para almacenar la cadena
      c.n_usados++;
      c.cad[c.n_usados]=new char[strlen(nueva)];//reservamos espacio para la nueva cadena
      strcpy(c.cad[c.n_usados],nueva);//Copiamos la cadena
   }
   else{
      Cadenas c_aux;
      c_aux.n=c.n+5;//Se reserva espacio para 5 cadenas mas
      c_aux.n_usados=c.n_usados+1;
      c_aux.cad=new char*[c.n];
      for(int i=0;i<c.n_usados;i++){
         c_aux.cad[i]=new char[strlen(c.cad[i])];//Se reserva espacio para el tamaño de cada cadena
         strcpy(c_aux.cad[i],c.cad[i]);//copiamos las cadenas
      }
      c_aux.cad[c_aux.n_usados]=new char[strlen(nueva)];//reservamos espacio para la nueva cadena
      strcpy(c_cad.cad[c_aux.n_usados],nueva);//copiamos la cadena
      //Llamamos a destruir Cadena
      c=&c_aux;//Asignamos la direccion de un puntero al original
   }
}
int LenCadenas(const Cadenas& c, int i){
   if(i>=0 && i<=c.n_usados)//se comprueba que el cumple con las condiones para estar en el vector
      return strlen(c.cad[i]);
   else
      return -1;
}
void GetCadenas(const Cadenas& c, int i, char *out){
   if(i>=0 && i<=c.n_usados && out!=0)
      out=&c.cad[i];
}
void DestruirCadenas(Cadenas& c){
   if(c!=0){
      for(int i=0;i<c.n_usados;i++)
         delete[] c.cad[i];
      delete[] c.cad;
   }
}
Errores:
src/cadenas.h:5: error: variable or field ‘CrearCadenas’ declared void
src/cadenas.h:5: error: ‘Cadenas’ was not declared in this scope
src/cadenas.h:5: error: ‘c’ was not declared in this scope
In file included from src/cadenas.cpp:2:
src/cadenas.h:5: error: variable or field ‘CrearCadenas’ declared void
src/cadenas.h:5: error: ‘Cadenas’ was not declared in this scope
src/cadenas.h:5: error: ‘c’ was not declared in this scope
src/cadenas.cpp:5: error: variable or field ‘CrearCadenas’ declared void
src/cadenas.cpp:5: error: ‘Cadenas’ was not declared in this scope
src/cadenas.cpp:5: error: ‘c’ was not declared in this scope
src/cadenas.cpp:11: error: expected ‘,’ or ‘...’ before ‘&’ token
src/cadenas.cpp:11: error: ISO C++ forbids declaration of ‘Cadenas’ with no type
src/cadenas.cpp: In function ‘int SizeCadenas(int)’:
src/cadenas.cpp:12: error: ‘c’ was not declared in this scope
src/cadenas.cpp: At global scope:
src/cadenas.cpp:15: error: variable or field ‘AddCadenas’ declared void
src/cadenas.cpp:15: error: ‘Cadenas’ was not declared in this scope
src/cadenas.cpp:15: error: ‘c’ was not declared in this scope
src/cadenas.cpp:15: error: expected primary-expression before ‘const’
Son muchos errores, pero creo que si arreglo el causante del fallo, se solucionan todos los demas errores.