Skocz do zawartości

Visual Code błędy elementu #include


Pomocna odpowiedź

Napisano (edytowany)

Już po raz któryś pojawia się błąd z którym nie mogę sobie poradzić 

Wykryto błędy elementu #include. Zaktualizuj element includePath. Dla tej jednostki translacji (C:\Users\dell\Documents\PlatformIO\Projects\Pms_test\lib\3080r\3080r.c) wyłączono zygzaki.C/C++(1696)
nie można otworzyć pliku źródło "functional" (dependency of "Ticker.h")C/C++(1696)

Zawsze to omijałem (czyt. tuszowałem problem zamiast go rozwiązać) no ale wiecznie tak nie można. Tak wygląda drzewo projektu,

389317676_bd.thumb.JPG.b57430134b0c96b6a2354c0f65fa3243.JPG

czy to oznacza że nie mogę stosować Ticker.h w swoich bibliotekach? Nawet jakbym chciał z main przesłać wskaźnik do timera to muszę znać jego typ więc i tak ta biblioteka musi być dołączona 

 

Edytowano przez _LM_
Przed chwilą, _LM_ napisał:

Już po raz któryś pojawia się błąd z którym nie mogę sobie poradzić 

To jest błąd rzucony przez kompilator czy IDE? Z tego co podałeś to ciężko stwierdzić. Musisz podać więcej informacji. 

Możesz udostępnić projekt przez Gita albo dołączyć archiwum z projektem żeby dało się to odpalić samodzielnie?

Program dekoduje ramki ze stacji pogodowej hyundai 3080 chciałem te funkcje wydzielić do osobnych plików aby nie było bałaganu w kodzie

W ini widzę tylko lib_deps

[env:esp12e]
platform = espressif8266
board = esp12e
framework = arduino
upload_speed = 115200
lib_deps = 
	arduino-libraries/NTPClient@^3.1.0
	fu-hsi/PMS Library @ ^1.1.0
	sparkfun/SparkFun BME280 @ ^2.0.9
	sparkfun/SparkFun VEML6075 Arduino Library @ ^1.1.4
	sparkfun/SparkFun AS3935 Lightning Detector Arduino Library @ ^1.4.3
	remoteme/RemoteMe @ ^1.0.26

O to chodzi?

Ja mam np. coś takiego dla esp32
 

lib_extra_dirs = ~/Arduino/libraries, ~/.arduino15/packages/esp32/hardware/esp32/1.0.4/libraries

(windowsowe ścieżki będą inne). Bez tego się nie kompiluje.

  • Lubię! 1
(edytowany)

Z tego co sprawdziłem to u mnie pierwszy błąd polega na braku dołączenia SPI:

In file included from .pio\libdeps\esp12e\SparkFun AS3935 Lightning Detector Arduino Library\src\SparkFun_AS3935.cpp:12:0:
.pio\libdeps\esp12e\SparkFun AS3935 Lightning Detector Arduino Library\src\SparkFun_AS3935.h:5:17: fatal error: SPI.h: No such file or directory

Zwykle rozwiązuje się to... przez dodanie include'a SPI.h w main.cpp. Po załączeniu SPI, pojawia się kolejny problem, który już wskazuje na to, że kompilator nie może sobie ogarnąć include <functional> (od std::function).

In file included from lib\3080r\3080r.c:2:0:
C:\Users\Mateusz\.platformio\packages\framework-arduinoespressif8266\libraries\Ticker\src/Ticker.h:25:22: fatal error: functional: No such file or directory
 #include <functional>

I tutaj trochę nie mam pomysłu bo nigdy nie używałem zewnętrznych bibliotek. Ale spróbował bym zrobić nowy projekt i w nim załączać bibliotekę Ticker i jej użyć. I zobaczyć czy na takim basicowym projekcie nadal jest problem z brakiem <functional>. Kolejnym podejściem mogłoby być wrzucenie źródeł biblioteki Ticker bezpośrednio do projektu (już nie przez plik projektu). Bibliotekę wrzuć do katalogu lib zgodnie z wytycznymi które są opisane w README.

Edytowano przez Matthew11
poprawa literówek
  • Lubię! 1

Update. Wiem o co chodzi. Masz "bibliotekę" która jest kodem C. W tym kodzie załączasz bibliotekę Ticker, która, załącza header C++ <functional>. Nie znam się na miksowaniu C i C++, ale generalnie to nie chce działać.

Ale jak zmienisz rozszerzenie 3080r.c na 3080r.cpp to błędu z problemem dołączenia <functional> już nie ma, ale za to pojawia się masa kolejnych błędów, ale już w Twoim kodzie.

  • Pomogłeś! 1
27 minut temu, Matthew11 napisał:

Ale jak zmienisz rozszerzenie 3080r.c na 3080r.cpp to błędu z problemem dołączenia <functional> już nie ma, ale za to pojawia się masa kolejnych błędów, ale już w Twoim kodzie.

No jak ręką odjął 😉 dzięki za trafną poradę! 

Ogólnie C i CPP często się nie lubią jeżeli chodzi o cross-include... IDE często mają z tym problemy. Jeżeli dobrze obstawiam używasz CMake i tutaj najprawdopodobniej jest źródło problemu... Bo mam to samo z Raspberry Pi Pico, ale ostatnio przerzuciłem się całkowicie na CPP...

Podobna sytuacja występuje jak np. implementowałem moje utils.c w Pico i też miałem lawinę błędów... Czyli to raczej nie samo IDE, a coś od strony kompilatora.

(edytowany)
55 minut temu, _LM_ napisał:

To jeszcze pytanie czy jeśli plik źródłowy jest .cpp to header powinien być  .hpp?

Nie ma takiego wymogu. Możesz używać .h lub .hpp i z tego co mi wydaje można stosować jeszcze inne rozszerzenia.

W praktyce nie miałem żadnych problemów z używaniem .h/.cpp przy kompilacji pod C++.

Natomiast słyszałem opinię, że stosownie odpowiednio .h/.c i .hpp/.cpp jest dobrą praktyką i chroni przed wieloma problemami (ta opinia głównie dotyczyła pisania kodu, który miał działać na wielu platformach pewnie można to wygrzebać gdzieś w prezentacjach lub na kanale Jasona Turnera).

57 minut temu, H1M4W4R1 napisał:

Jeżeli dobrze obstawiam używasz CMake

Byłoby świetnie, ale niestety nie*. PIO korzysta ze swojego customowego systemu budowania

*Jeśli @_LM_ nie korzysta z czegoś innego i nadal dyskusja dotyczy PIO to powyższe się aplikuje.

Edytowano przez Matthew11
poprawa literówki
  • Lubię! 1

Ok ostatnie pytanie (chyba) jeśli chodzi o strukturę projektu: 

P3.thumb.JPG.d5b796a4126728168faa99f3be4ae2d1.JPG

Bo co innego jakaś libka a co innego pliki które są mi potrzebne "od ręki". Jak to jest w tym VScode mogę je dołączać w folderze src czy nie? Tak żeby było jasne o czym piszę to np tak to robiłem w eclispe:

P4.thumb.JPG.8e572384a256b3839a2238d1238665ec.JPG

 

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...