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 wczoraj o godz. 17:06
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
takich warning'ów które kompilator sygnalizuje, że próbujesz przekazać argument niezgodny z oczekiwanym typem jest dużo, proszę tylko ich część:

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,
      |         ^~~~~~~~~~~~~~
C:/CodeBlocks/MinGW/include/c++/14.2.0/fstream:891:9: note:   template argument deduction/substitution failed:
C:/CodeBlocks/MinGW/include/c++/14.2.0/fstream:64:60: error: 'class std::__cxx11::basic_string<wchar_t>' has no member named 'make_preferred'
   64 |            = decltype(std::declval<_Path&>().make_preferred().filename())>
      |                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~
C:/CodeBlocks/MinGW/include/c++/14.2.0/fstream:899:7: note: candidate: 'std::basic_ofstream<_CharT, _Traits>::basic_ofstream(std::basic_ofstream<_CharT, _Traits>&&) [with _CharT = char; _Traits = std::char_traits<char>]'
  899 |       basic_ofstream(basic_ofstream&& __rhs)
      |       ^~~~~~~~~~~~~~
C:/CodeBlocks/MinGW/include/c++/14.2.0/fstream:899:39: note:   no known conversion for argument 1 from 'std::wstring' {aka 'std::__cxx11::basic_string<wchar_t>'} to 'std::basic_ofstream<char>&&'
  899 |       basic_ofstream(basic_ofstream&& __rhs)
      |                      ~~~~~~~~~~~~~~~~~^~~~~
C:/CodeBlocks/MinGW/include/c++/14.2.0/fstream:874:7: note: candidate: 'std::basic_ofstream<_CharT, _Traits>::basic_ofstream(const std::string&, std::ios_base::openmode) [with _CharT = char; _Traits = std::char_traits<char>; std::string = std::__cxx11::basic_string<char>; std::ios_base::openmode = std::ios_base::openmode]'
  874 |       basic_ofstream(const std::string& __s,
      |       ^~~~~~~~~~~~~~
C:/CodeBlocks/MinGW/include/c++/14.2.0/fstream:874:41: note:   no known conversion for argument 1 from 'std::wstring' {aka 'std::__cxx11::basic_string<wchar_t>'} to 'const std::string&' {aka 'const std::__cxx11::basic_string<char>&'}
  874 |       basic_ofstream(const std::string& __s,
      |                      ~~~~~~~~~~~~~~~~~~~^~~
C:/CodeBlocks/MinGW/include/c++/14.2.0/fstream:856:7: note: candidate: 'std::basic_ofstream<_CharT, _Traits>::basic_ofstream(const wchar_t*, std::ios_base::openmode) [with _CharT = char; _Traits = std::char_traits<char>; std::ios_base::openmode = std::ios_base::openmode]'
  856 |       basic_ofstream(const wchar_t* __s,
      |       ^~~~~~~~~~~~~~
C:/CodeBlocks/MinGW/include/c++/14.2.0/fstream:856:37: note:   no known conversion for argument 1 from 'std::wstring' {aka 'std::__cxx11::basic_string<wchar_t>'} to 'const wchar_t*'
  856 |       basic_ofstream(const wchar_t* __s,
      |                      ~~~~~~~~~~~~~~~^~~
C:/CodeBlocks/MinGW/include/c++/14.2.0/fstream:839:7: note: candidate: 'std::basic_ofstream<_CharT, _Traits>::basic_ofstream(const char*, std::ios_base::openmode) [with _CharT = char; _Traits = std::char_traits<char>; std::ios_base::openmode = std::ios_base::openmode]'
  839 |       basic_ofstream(const char* __s,
      |       ^~~~~~~~~~~~~~
C:/CodeBlocks/MinGW/include/c++/14.2.0/fstream:839:34: note:   no known conversion for argument 1 from 'std::wstring' {aka 'std::__cxx11::basic_string<wchar_t>'} to 'const char*'
  839 |       basic_ofstream(const char* __s,
      |                      ~~~~~~~~~~~~^~~
C:/CodeBlocks/MinGW/include/c++/14.2.0/fstream:828:7: note: candidate: 'std::basic_ofstream<_CharT, _Traits>::basic_ofstream() [with _CharT = char; _Traits = std::char_traits<char>]'
  828 |       basic_ofstream(): __ostream_type(), _M_filebuf()
      |       ^~~~~~~~~~~~~~
C:/CodeBlocks/MinGW/include/c++/14.2.0/fstream:828:7: note:   candidate expects 0 arguments, 1 provided
EditorRPG2D\headers/Map.hpp: In member function 'void Mapa::load(std::wstring)':
EditorRPG2D\headers/Map.hpp:795:36: error: no matching function for call to 'std::basic_ifstream<char>::basic_ifstream(std::wstring&)'
  795 |         std::ifstream file(filename);
      |                                    ^
C:/CodeBlocks/MinGW/include/c++/14.2.0/fstream:619:9: note: candidate: 'template<class _Path, class _Require> std::basic_ifstream<_CharT, _Traits>::basic_ifstream(const _Path&, std::ios_base::openmode) [with _Require = _Path; _CharT = char; _Traits = std::char_traits<char>]'
  619 |         basic_ifstream(const _Path& __s,
      |         ^~~~~~~~~~~~~~
C:/CodeBlocks/MinGW/include/c++/14.2.0/fstream:619:9: note:   template argument deduction/substitution failed:
C:/CodeBlocks/MinGW/include/c++/14.2.0/fstream:64:60: error: 'class std::__cxx11::basic_string<wchar_t>' has no member named 'make_preferred'
   64 |            = decltype(std::declval<_Path&>().make_preferred().filename())>
      |                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~
C:/CodeBlocks/MinGW/include/c++/14.2.0/fstream:627:7: note: candidate: 'std::basic_ifstream<_CharT, _Traits>::basic_ifstream(std::basic_ifstream<_CharT, _Traits>&&) [with _CharT = char; _Traits = std::char_traits<char>]'
  627 |       basic_ifstream(basic_ifstream&& __rhs)
      |       ^~~~~~~~~~~~~~
C:/CodeBlocks/MinGW/include/c++/14.2.0/fstream:627:39: note:   no known conversion for argument 1 from 'std::wstring' {aka 'std::__cxx11::basic_string<wchar_t>'} to 'std::basic_ifstream<char>&&'
  627 |       basic_ifstream(basic_ifstream&& __rhs)

Map.hpp:795:36: error: no matching function for call to 'std::basic_ifstream<char>::basic_ifstream(std::wstring&)'
  795 |         std::ifstream file(filename);

/CodeBlocks/MinGW/include/c++/14.2.0/fstream:64:60: error: 'class std::__cxx11::basic_string<wchar_t>' has no member named 'make_preferred'
   64 |            = decltype(std::declval<_Path&>().make_preferred().filename())>

itd...

i pozostaje pytanie, czy wyłączyłeś w VS ostrzeżenia? może sprawdź jaki masz Warning Level ?
Jeżeli projekt jest tylko pod VS to może nie ma się czym przejmować.

Chociaż dalej mnie interesuje jak przeszedł Ci ten fabs bez biblioteki cmath
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