• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed [ESP32 C++] Problem z plikiem nagłówkowym i strukturą

VPS Starter Arubacloud
0 głosów
353 wizyt
pytanie zadane 19 lipca 2021 w C i C++ przez Marak123 Stary wyjadacz (11,190 p.)
zamknięte 21 lipca 2021 przez Marak123

Witam smiley

Robię sobie projekcik na płytkę ESP32 i mam mały problem z importem struktur które są zrobione w pliku nagłówkowym .h.

Plik nagłówkowy:

#ifndef STRUCTURE
#define STRUCTURE

#include <vector>
#include <cstdint>
#include <Arduino.h>
#include "function.h"

struct _wifi
{
  String SSID = "";
  String password = "";
  int localIP[4];
  int gateway[4];
  int subnet[4];
};

struct _ftpServer{
  char addrIP[];
  String username;
  String password;
};

#endif

A to jest plik do którego chcę importować te struktury:

#ifndef VARIABLES
#define VARIABLES

#include "structure.h"

_wifi dataWifi;  //Wifi dane konfiguracyjne
struct _ftpServer dataFtp; //Serwer ftp dane konfiguracyjne

#endif

 

I tutaj pojawia się problem bo te pliki są w tym samym folderze i niby się importuje ale i tak próbując stworzyć strukturę według wzoru np. _wifi to pokazuje ze nie ma takiej nazwy typu, czyli po prostu nie widzi tej struktury i teraz pytanie dlaczego nie widzi tych struktur inny plik nagłówkowy??

Wie ktoś może co robę źle?? 

 

Edit::

Treść błędu

error: '_wifi' does not name a type
komentarz zamknięcia: Dzięki za pomoc
1
komentarz 20 lipca 2021 przez j23 Mędrzec (194,920 p.)
Podaj pełną treść błędu.
komentarz 20 lipca 2021 przez Marak123 Stary wyjadacz (11,190 p.)
Już jest :)
1
komentarz 20 lipca 2021 przez j23 Mędrzec (194,920 p.)

Jak zakomentujesz definicję dataWifi, to definicja dataFtp przechodzi?

komentarz 20 lipca 2021 przez Marak123 Stary wyjadacz (11,190 p.)

No właśnie nie tam jest podobny błąd w którym chodzi o to sam za każdym razem gdy próbuje stworzyć zdefiniowaną strukturę to pokazuje mi się błąd ze nie zdefiniowany typ.

A to jest błąd wyskakujący przy dataFtp:

error: aggregate '_ftpServer dataFtp' has incomplete type and cannot be defined

 

1
komentarz 20 lipca 2021 przez Oscar Nałogowiec (29,290 p.)
raz używasz samej nazwy, drugim ze słowem struct. To celowe działanie?

Nie dałeś typedef. Już nie pamiętam od jakiej wersji (chyba ogólnie w C++ - w C to nie działa) definicja struct i class od razu definiuje typ o tej nazwie, ale czy używasz odpowiedniej wersji i pliki są cpp?
1
komentarz 20 lipca 2021 przez j23 Mędrzec (194,920 p.)

@Marak123, a w pliku function.h nie zgubiłeś jakiegoś nawiasu czy średnika?

komentarz 20 lipca 2021 przez Marak123 Stary wyjadacz (11,190 p.)
edycja 20 lipca 2021 przez Marak123

@Oscar, Ogólnie mówiąc to specjalnie tak dałem raz ze struct a raz bez aby pokazać ze żadne nie działa.

Ale tworzyłem wcześniej w tym pliku struktury i działało normalnie dodaje tylko słowo struct aby wiadomo było dla mnie ze to struktura używam plików z jezyka C .h

komentarz 20 lipca 2021 przez Marak123 Stary wyjadacz (11,190 p.)
edycja 20 lipca 2021 przez Marak123

@j23, Nie ponieważ to nie tylko w tym pliku jest ten problem. Mam parę plików w projekcie i w każdym pliku jest ten sam problem. A kompiler nie pokazuje błędu że gdzieś średnika nie ma.

komentarz 20 lipca 2021 przez Marak123 Stary wyjadacz (11,190 p.)
Dziwne jest to ze w pliku main.cpp gdy inicjuję strukturę to normalnie działa ale gdy robię to w pliku .h to nie widzi mi tej z pliku structure.h w której jest zdefiniowana.
1
komentarz 20 lipca 2021 przez j23 Mędrzec (194,920 p.)

Zasadniczo nie powinieneś definiować zmiennych globalnych w plikach nagłówkowych - tu dajesz tylko deklaracje zmiennych:

extern _wifi dataWifi;
extern _ftpServer dataFtp; 

a w jakimś pliku źródłowym .cpp definicje:

_wifi dataWifi;
_ftpServer dataFtp; 

 

komentarz 20 lipca 2021 przez Marak123 Stary wyjadacz (11,190 p.)
No może i tak ale nie zrobię deklaracji struktury bez za pomocą extern bo nie są te struktury widziane mogę co jedyne to zadeklarować ją w pliku .cpp ale to mi nie pasuje.

No ale dzięki za informacje
1
komentarz 20 lipca 2021 przez j23 Mędrzec (194,920 p.)
No ale jak zrobisz tak, jak napisałem, to się kompiluje, czy nie?
1
komentarz 20 lipca 2021 przez Oscar Nałogowiec (29,290 p.)

@Marak123,
 Dopisz po prostu te dwa externy, które podał j23 za definicjami struct-ów, przed #endif.

komentarz 20 lipca 2021 przez Marak123 Stary wyjadacz (11,190 p.)

Znaczy pokazuje błąd w pliku nagłówkowym jak dałem

extern _wifi dataWifi;

A w pliku .cpp

_wifi dataWifi

to zadeklarowało tylko to co jest w main.cpp a to co jest w pliku nagłówkowym z extern to pokazuje błąd does not name a type.

1
komentarz 20 lipca 2021 przez Oscar Nałogowiec (29,290 p.)

Może nie zaczynaj nazw podkreśleniem, to chyba jest jakoś zarezerwowane.

I ta linijka

#ifndef STRUCTURE

Słówko STRUCTURE wydaje się mało unikalne - #define są globalne, jeśli ktos użył tego słowa w jednym z plików nagłówkowych, które includujesz to się namięsza.

komentarz 20 lipca 2021 przez Marak123 Stary wyjadacz (11,190 p.)

Może nie zaczynaj nazw podkreśleniem, to chyba jest jakoś zarezerwowane.

Ok

Ogólnie to zrobiłem nowy plik nadałem mu nazwę struct.h i w #ifndef dałem STRUCT i teraz działa gdy includuje normalnie mi rozpoznaje ze coś takiego istnieje więc był jakiś problem z plikiem może projekt zrobiony coś źle skonfigurował zapis pliku albo tak jak mówisz @Oscar to po prostu ta nazwa STRUCTURE jest już używana albo jakoś zadeklarowana przez kompilator nie wiem. Ale ważne ze działa.

Dzięki za pomoc @Oscar@j23 smileyyes

komentarz 21 lipca 2021 przez j23 Mędrzec (194,920 p.)

albo tak jak mówisz @Oscar to po prostu ta nazwa STRUCTURE jest już używana

Dlatego dobrze jest dawać nazwę pliku z rozszerzeniem, np. __STRUCTURE_H__

komentarz 21 lipca 2021 przez Marak123 Stary wyjadacz (11,190 p.)
No w sumie to ta

Podobne pytania

0 głosów
1 odpowiedź 286 wizyt
0 głosów
0 odpowiedzi 287 wizyt
pytanie zadane 26 kwietnia 2022 w Mikrokontrolery przez Marak123 Stary wyjadacz (11,190 p.)
+1 głos
0 odpowiedzi 243 wizyt
pytanie zadane 1 maja 2021 w C i C++ przez Marak123 Stary wyjadacz (11,190 p.)

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...