nanoant20 Temat założony przez niniejszego użytkownika |
czy kompilator może dołączyć nagłówki lub funkcje w sposób ukryty? » 2025-04-26 21:03:59 Czy mogą występować różnice w sposobie, w jaki kompilatory (MSVC vs. GCC) traktują błędy i ostrzeżenia ? moje środowisko: Windows 10 64bit g++ --version g++ (MinGW-W64 x86_64-ucrt-posix-seh, built by Brecht Sanders, r3) 14.2.0 SFML-2.6.2 CMake 4.0 cmake_minimum_required(VERSION 3.31) utworzyłem CMakeLists.txt, żeby zbudować programy napisane przez user: tBane https://github.com/tBane1995 zacznijmy od tego: Open-Dialog-Box-main w pliku main.cpp nie dołącza #include <cmath> ale w headers w pliku Scrollbar.hpp używa fabs: if( fabs( mousePos.x - mouseStartPos.x ) > 100 ) przy budowaniu projektu wyskoczył error zbudowałem go dodając bibliotekę cmath w pliku main.cpp drugi projekt "Editor-RPG2D-main" staram się go zbudować, a tu ,np. /Map.hpp:602:36: error: no matching function for call to 'std::basic_ofstream<char>::basic_ofstream(std::wstring&)' 602 | std::ofstream file(filename);
mógłbym zacząć poprawiać i użyć std::wofstream, ale nie o to mi chodzi. kompilator MSVC zapewnia dobry poziom diagnostyki, więc czy możliwe jest, że kompilator nie ma domyślnie włączonego odpowiedniego poziomu ostrzeżeń? a może tBane pisze exploita :D |
|
tBane |
» 2025-04-26 21:28:42 U mnie działa :D 1) nie ma sensu odpalać Open Dialog Box, bo w Edytorze RPG2D jest ulepszona wersja w pliku FileDialog.hpp (już usunąłem to repo) 2) zmień po prostu std::wstring filename na std::string filename lub użyj std::wofstream |
|
nanoant20 Temat założony przez niniejszego użytkownika |
» 2025-04-26 21:47:30 domyślam się że u Ciebie działa, ale tam nie ma 1 error'u czy warning'u ale cała litania. Czy w swoim projekcie VS2022 nie masz włączonych odpowiednich poziomów ostrzeżeń kompilatora, które mogą zgłaszać ten typ problemu ? Czy może wyłączyłeś ? |
|
tBane |
» 2025-04-26 21:51:32 U mnie się buduje bez problemu w Visual Studio 2022 std:C++20. Pokaż jakie błędy wykryło to zaraz to poprawię. Dużo jest tych błędów? |
|
nanoant20 Temat założony przez niniejszego użytkownika |
» 2025-04-26 22:13:15 warning'ów które kompilator sygnalizuje jest dużo próbujesz przekazać argument niezgodny z oczekiwanym typem EditorRPG2D\headers/Map.hpp: In member function 'void Mapa::save(std::wstring)': EditorRPG2D\headers/Map.hpp:602:36: error: no matching function for call to 'std::basic_ofstream<char>::basic_ofstream(std::wstring&)' 602 | std::ofstream file(filename); | ^ In file included from EditorRPG2D\main.cpp:5: C:/CodeBlocks/MinGW/include/c++/14.2.0/fstream:891:9: note: candidate: 'template<class _Path, class _Require> std::basic_ofstream<_CharT, _Traits>::basic_ofstream(const _Path&, std::ios_base::openmode) [with _Require = _Path; _CharT = char; _Traits = std::char_traits<char>]' 891 | basic_ofstream(const _Path& __s, | ^~~~~~~~~~~~~~
//edit Lwią część tych ostrzeżeń stanowi mieszanie typów for( short i = 0; i < vector.size(); i++ ) jeżeli vector.size() jest większy niż może przechować typ short to efekt będzie taki, że następuje przerwanie pętli i nie zostaną przetworzone wszystkie dane. W tak skonstruowanej pętli następuje niejawne rzutowanie. static_cast<size_t>(i) < vector.size(); zakres short -32768 do 32767, gdy zmienna i osiągnie 32767 nastepuje zawinięcie typu do -32768 sprawdź : std::cout << static_cast < size_t >( - 32768 ) << "\n"; na systemie 64-bitowym jest to bardzo duża liczba dodatnia! Wtedy warunek i < vector.size() jest fałszywy i następuje przerwanie pętli. Należy używać typu "size_t" lub pętli zakresowej. Przyjrzałbym się usuwaniu obiektów brak "destruktorów wirtualnych" w polimorficznych klasach |
|
tBane |
» 2025-04-26 22:21:01 Nie, nie wyłączałem warningów. Spróbuję zaraz poprawić kod. A spróbuj uruchomić w Visual Studio. Zaraz zobaczę. |
|
tBane |
» 2025-04-26 22:24:44 Warning Level mam na poziome "Level3 (/W3)"
Czasem mi błędy wyskakują w Error List to klikam ppm na okno z kodem, wybieram "Rescan" i "Clear Browing Database Errors" i błędy w Error List znikają. A projekt i tak się kompiluje i uruchamia. |
|
nanoant20 Temat założony przez niniejszego użytkownika |
» 2025-04-26 22:29:22 nie mam zainstalowanego Visual Studio, i dlatego założyłem temat "czy kompilator może dołączyć nagłówki lub funkcje w sposób ukryty?" ponieważ ten przypadek z fabs był bardzo ciekawy, że Ci kompilator skompilował bez dołączonej biblioteki cmaths. p.s. @tBane Nie musisz poprawiać kodu, jak będę go chciał uruchomić to sobie go poprawie.
|
|
« 1 » 2 |