Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

czy kompilator może dołączyć nagłówki lub funkcje w sposób ukryty?

Ostatnio zmodyfikowano 2025-04-28 17:05
Autor Wiadomość
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
P-182280
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
P-182281
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ś ?
P-182282
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?
P-182283
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
P-182284
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ę.
P-182285
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.
P-182286
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.

P-182287
« 1 » 2
  Strona 1 z 2 Następna strona