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

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema de declaración de funciones externas al fichero cpp
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema de declaración de funciones externas al fichero cpp  (Leído 2,070 veces)
minak

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Problema de declaración de funciones externas al fichero cpp
« en: 21 Marzo 2018, 22:23 pm »

Bueno mi problema no es en c++ si no en Arduino pero como el lenguaje que más se parece es a c++ lo pongo aquí haber si me podéis ayudar. El problema recae en que mi nivel de programación no es muy alto y que nunca me han llegado enseñado hacer programas estructurados en diferentes ficheros cpp. Ahora quiero aprender y no encuentro muy bien cómo se hace. El caso que quiero que el ino llame a funciones que están en diferentes .cpp y hasta hay bien pero cuando es un cpp el que llama a otra función declarada en otro cpp me da error que el compilador en ese cpp no lo tiene declarado. el caso como puedo hacer que lo que se declare en el programa principal este donde esté se le pueda llamar desde cualquier parte. Muchas gracias.

Pd: Es decir tengo el ino y hay declaro hago el include a wifi.h y datos.h pero claro desde la parte del codigo del cpp de wifi.h no puedo llamar a funciones de datos.h.


« Última modificación: 21 Marzo 2018, 22:40 pm por minak » En línea

Kenji-chan

Desconectado Desconectado

Mensajes: 104


Ver Perfil
Re: Problema de declaración de funciones externas al fichero cpp
« Respuesta #1 en: 21 Marzo 2018, 23:14 pm »

en c/c++ cuando creas un programa que incluye otros ficheros lo que haces es declarar su header en el programa principal

main.cpp
Código
  1. #include <iostream>
  2. #include "wifi.h"
  3. #include "datos.h"
  4.  
  5. int main(int argc, char* argv[]){
  6.    ...
  7.    ...
  8.    ...
  9. /*codigo*/
  10. }
  11.  

des ese modo todo lo que este declarado dentro de las cabeceras que incluimos lo podremos usar dentro del fichero main.cpp (main.cpp es el nombre que le he dado a mi programa) pero no podemos llamarlo des de otros ficheros por ejemplo desde datos.cpp no podemos llamar funciones que estén en wifi.cpp  para ello en datos.h tenemos que incluir el header de wifi.h


« Última modificación: 21 Marzo 2018, 23:16 pm por Kenji-chan » En línea

minak

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Re: Problema de declaración de funciones externas al fichero cpp
« Respuesta #2 en: 22 Marzo 2018, 11:13 am »

Que mal eso lo tengo hecho y no hace caso, creo que tiene que ver porque en cada header
Código:
/***********************************************************************************************************************************/
/*                                            Modulo de lectura/escritura en la eeprom                                             */
/*                                                     Soporte EEPROM V_171225.0                                                   */
/*                                                                                                                                 */
/***********************************************************************************************************************************/

#ifndef SoporteEEPROM_H
#define SoporteEEPROM_H

#include <ESP8266WiFi.h>  //Libreria necesaria para el ESP8266
#include <EEPROM.h>       //Libreria para el uso de la EEPROM

#include "Setting.h"

void setupEEPROM ();            // Setup EEPROM
extern void grabarEEPROM(int, String); //ARG int, ADDR String Datos
extern String leerEEPROM(int);         //ARG int, ADDR

#endif //__SoporteEEPROM_H

Y el header del otro implicado es el siguiente

Código:
/***********************************************************************************************************************************/
/*                                  Modulo reposable de la comunicacion Wifi                                                       */
/*                                     ModuloComunicacionWifi V_171214.0                                                           */
/*  Modulo reposable de la comunicacion Wifi, este modulo regula la comunicacion wifi, habilita un modo programacion y el modo  */
/*  OTA para la actualizacion a distancia.                                                                                         
/***********************************************************************************************************************************/

#ifndef ComunicacionWIFI_H
#define ComunicacionWIFI_H

#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266WiFi.h>
#include <ESP8266mDNS.h>          //Manejo de DNS  Multicast DNS
#include <WiFiUdp.h>              //Manejo de UDP 
#include <ArduinoOTA.h>           //Manejo de OTA

#include "Setting.h"
#include "SoporteEEPROM.h"  //DECLARO EL HEADER DEL IMPLICADO EN EL PROBLEMA


/*******************************************************/
void setupModuloWifi();
void iniciandoWifi();
void modoSoftAP();
void modoConf();
void escanearRedes();
void leerConfSSID(); //DA PROBLEMAS NO ENCUENTRA LAS FUNCIONES
void paginaConf();
void guardarConfWifi(); //DA PROBLEMAS NO ENCUENTRA LAS FUNCIONES
void getUpdateOTA();
void testConexion();

#endif //__ComunicacionWIFI_H
Lo que correspondería en main también incluyo solo la parte implicada en las declaraciones de las partes.
Código:
//#include <Wire.h>                     //Manejo del I2C
//#include <ESP8266WiFi.h>

//#include "ComunicacionWIFI.h"
#include "Globales.h"             //Variables globales
#include "Setting.h"              //Activacion de los diferentes funciones

#ifdef TOOLS-I2C_ENABLE
#include "ToolI2C.h"
#endif //FIN

#ifdef DISPLAY-OLED_ENABLE
#include "PantallaOLED.h"
#endif //FIN

#ifdef SENSOR-HUMD-TEMP_ENABLE
#include "SoporteSHT30.h"
#endif //FIN

#ifdef SUPPORT-EEPROM_ENABLE
#include "SoporteEEPROM.h"
#endif

#ifdef SUPPORT-WIFI
#include "ComunicacionWIFI.h"
#endif

No tengo problemas para usar las funciones sobre el main pero sobre otro fichero no los encuentra
En línea

Kenji-chan

Desconectado Desconectado

Mensajes: 104


Ver Perfil
Re: Problema de declaración de funciones externas al fichero cpp
« Respuesta #3 en: 22 Marzo 2018, 19:09 pm »

que tipo de error te marca al compilar??
pueda que te marque undefined reference to

las funciones void leerConfSSID() y void guardarConfWifi() las creaste tu? o ya están creadas en SoporteEEPROM??
En línea

minak

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Re: Problema de declaración de funciones externas al fichero cpp
« Respuesta #4 en: 23 Marzo 2018, 19:13 pm »

Contestándote al mensaje vi el error, que tonto es que cuando fragmente el código por módulos he dejado restos y cambie mucho el funcionamiento de la parte de lectura y escritura para adaptarlo a un futuro implementar SD o otros tipos de almacenamiento y la había liado en la llamada a las funciones. Codigo compilado aunque no se si funciona no dispongo aquí ningún Wemos(Aprox. ARDUINO) para comprobarlo.

Estoy haciendo mi propio programa principalmente para la placa Sonoff y otros dispositivos.

Muchisimas gracias Kenji-chan.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda con el "&" en la declaración de funciones [C++]
Programación C/C++
Don Pollo 5 3,018 Último mensaje 21 Marzo 2011, 21:43 pm
por Akai
Llamado a funciones Externas
Scripting
ignorantev1.1 1 2,458 Último mensaje 5 Julio 2011, 03:00 am
por Novlucker
problema con librerías externas y jar
Java
Nephewless 4 4,821 Último mensaje 9 Octubre 2012, 17:35 pm
por sapito169
¿maneras de comprobar errores en funciones externas?
Programación C/C++
luis_74 0 1,363 Último mensaje 27 Mayo 2015, 22:30 pm
por luis_74
Duda en declaración de funciones (C++)
Programación C/C++
JonaLamper 3 2,528 Último mensaje 18 Agosto 2016, 22:13 pm
por ivancea96
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines