From 3386bd8e1f5240ee26eb07304d2464614dc49278 Mon Sep 17 00:00:00 2001 From: Wouter Beek Date: Sat, 20 Jun 2026 11:20:04 +0200 Subject: [PATCH 01/19] BUILD: Added a simple build process. --- .gitignore | 1 + CMakeLists.txt | 34 +++++ CMakePresets.json | 105 ++++++++++++++++ conanfile.txt | 6 + readme.md | 312 ++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 458 insertions(+) create mode 100644 .gitignore create mode 100644 CMakeLists.txt create mode 100644 CMakePresets.json create mode 100644 conanfile.txt create mode 100644 readme.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..378eac2 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +build diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..67acaee --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,34 @@ +cmake_minimum_required(VERSION 4.3.2) +project(ppp-cpp + DESCRIPTION "A very simple boilerplate for cross-OS C++ compilation with dependency management." + HOMEPAGE_URL https://github.com/wouterbeek/cpp-boilerplate + LANGUAGES CXX + VERSION 0.1.0 +) + +set(cppVersion 23) +set(CXX_EXTENSIONS OFF) +set(CXX_STANDARD ${cppVersion}) +set(CXX_STANDARD_REQUIRED ON) + +add_library(base INTERFACE) +add_library(${PROJECT_NAME}::base ALIAS base) +target_compile_features(base INTERFACE cxx_std_${cppVersion}) + +find_package(fltk REQUIRED) + +add_library(ppp STATIC) +add_library(${PROJECT_NAME}::ppp ALIAS ppp) +target_include_directories(ppp PUBLIC ${CMAKE_SOURCE_DIR}) +target_link_libraries(ppp + PUBLIC + fltk::fltk + ${PROJECT_NAME}::base +) +target_sources(ppp + PRIVATE + Graph.cpp + GUI.cpp + Simple_window.cpp + Window.cpp +) diff --git a/CMakePresets.json b/CMakePresets.json new file mode 100644 index 0000000..15bda2a --- /dev/null +++ b/CMakePresets.json @@ -0,0 +1,105 @@ +{ + "version": 11, + "cmakeMinimumRequired": { + "major": 4, + "minor": 3, + "patch": 2 + }, + "configurePresets": [ + { + "binaryDir": "${sourceDir}/build/${presetName}", + "hidden": true, + "installDir": "${sourceDir}/install/${presetName}", + "name": "base", + "toolchainFile": "${sourceDir}/build/conan_toolchain.cmake" + }, + { + "cacheVariables": { + "CMAKE_CXX_COMPILER": "g++" + }, + "condition": { + "type": "equals", + "lhs": "${hostSystemName}", + "rhs": "Linux" + }, + "generator": "Ninja", + "hidden": true, + "inherits": "base", + "name": "linux-base" + }, + { + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Debug" + }, + "displayName": "Linux Debug", + "inherits": "linux-base", + "name": "linux-debug" + }, + { + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Release" + }, + "displayName": "Linux Release", + "inherits": "linux-base", + "name": "linux-release" + }, + { + "cacheVariables": { + "CMAKE_CXX_COMPILER": "cl.exe", + "CMAKE_PREFIX_PATH": "${sourceDir}/build" + }, + "condition": { + "type": "equals", + "lhs": "${hostSystemName}", + "rhs": "Windows" + }, + "generator": "Ninja", + "hidden": true, + "inherits": "base", + "name": "windows-base", + "vendor": { + "microsoft.com/VisualStudioSettings/CMake/1.0": { + "hostOS": ["Windows"], + "intelliSenseMode": "windows-msvc-x64" + }, + "microsoft.com/VisualStudioRemoteSettings/CMake/1.0": { + "hostOS": ["Windows"] + } + } + }, + { + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Debug" + }, + "displayName": "Windows Debug", + "inherits": "windows-base", + "name": "windows-debug" + }, + { + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Release" + }, + "displayName": "Windows Release", + "inherits": "windows-base", + "name": "windows-release" + } + ], + "buildPresets": [ + { + "configurePreset": "linux-debug", + "name": "linux-debug" + }, + { + "configurePreset": "linux-release", + "name": "linux-release" + }, + { + "configurePreset": "windows-debug", + "name": "windows-debug" + }, + { + "configurePreset": "windows-release", + "name": "windows-release" + } + ] +} diff --git a/conanfile.txt b/conanfile.txt new file mode 100644 index 0000000..e86b355 --- /dev/null +++ b/conanfile.txt @@ -0,0 +1,6 @@ +[generators] +CMakeDeps +CMakeToolchain + +[requires] +fltk/1.4.5 diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..393a0a9 --- /dev/null +++ b/readme.md @@ -0,0 +1,312 @@ +# Programming Principles and Practice + +This repository contains an up-to-date version of the code that goes along with the book Programming, Principles and Practices by Bjarne Stroustrup. When I was reading the book, I was surprised to find that the orignal code does not compile and contains many issues (see Appendix A). I have also tried to make the setup for the code easier, by including standard configuration for the build process and dependency management. + +# Building + +This repository uses [my boilerplate for building C++ projects](https://github.com/wouterbeek/cpp-boilerplate). You can read the detailed instructions in that repository, or run the following TLDR-summary: + + - `${buildType}` is `Debug` or `Release`. + - `${presetName}` is `linux-debug` or `linux-release` or `windows-debug` or `windows-release`. + +```sh +conan install . -b missing -of build -s build_type=${buildType} +cmake --preset ${presetName} +cmake --build --preset ${presetName} +./build/${presetName}/main +``` + +Notice that the forward slashes (Linux) should be backward slashes on Windows. + +# Fixes + +This section documents the fixes that were applied relative to the original code. + +# Appendices + +## Appendix A: Compiler output of the original code + +This appendix includes the original compiler output (MSVC) when trying to build the original code. Notice that there are many errors and warnings. + +```sh +$ cmake --build --preset windows-debug +[6/10] Building CXX object CMakeFiles\ppp.dir\Graph.cpp.obj +FAILED: [code=2] CMakeFiles/ppp.dir/Graph.cpp.obj +C:\PROGRA~1\MIB055~1\18\COMMUN~1\VC\Tools\MSVC\1451~1.362\bin\Hostx86\x64\cl.exe /nologo /TP -DLIBJPEG_STATIC -DXML_STATIC -D_MBCS -IC:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp -external:IC:\Users\WouterBeek\.conan2\p\b\fltk69eccc2d4492e\p\include -external:W0 /DWIN32 /D_WINDOWS /EHsc /Ob0 /Od -std:c++latest -MDd -RTC1 -Zi /showIncludes @CMakeFiles\ppp.dir\Graph.cpp.obj.modmap /FoCMakeFiles\ppp.dir\Graph.cpp.obj /FdCMakeFiles\ppp.dir\ppp.pdb /FS -c C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.h(89): error C7568: argument list missing after assumed function template 'vector' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.h(89): note: the template instantiation context (the oldest one first) is +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.h(88): note: while compiling class template 'Graph_lib::Vector_ref' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.h(90): error C7568: argument list missing after assumed function template 'vector' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.h(119): error C7568: argument list missing after assumed function template 'initializer_list' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.h(158): error C7568: argument list missing after assumed function template 'vector' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.h(159): error C2398: Element '1': conversion from 'Fl_Color' to 'int' requires a narrowing conversion +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.h(192): error C3861: 'error': identifier not found +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.h(197): error C3861: 'error': identifier not found +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.h(238): error C7568: argument list missing after assumed function template 'initializer_list' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.h(238): error C2280: 'Graph_lib::Shape::Shape(const Graph_lib::Shape &)': attempting to reference a deleted function +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.h(155): note: see declaration of 'Graph_lib::Shape::Shape' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.h(155): note: 'Graph_lib::Shape::Shape(const Graph_lib::Shape &)': function was explicitly deleted +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.h(238): error C3861: 'error': identifier not found +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.h(245): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.h(245): error C2143: syntax error: missing ',' before '&' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.h(249): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.h(249): error C2143: syntax error: missing ',' before '&' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.h(250): error C3646: 'label': unknown override specifier +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.h(250): error C2059: syntax error: '(' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.h(250): error C2334: unexpected token(s) preceding '{'; skipping apparent function body +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.h(258): error C3646: 'lab': unknown override specifier +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.h(258): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.h(245): error C2065: 's': undeclared identifier +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.h(245): error C2614: 'Graph_lib::Text': illegal member initialization: 'lab' is not a base or member +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.h(249): error C2065: 'lab': undeclared identifier +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.h(249): error C2065: 's': undeclared identifier +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.h(267): error C2061: syntax error: identifier 'string' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.h(326): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.h(326): error C2143: syntax error: missing ',' before '&' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.h(329): error C3646: 'mark': unknown override specifier +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.h(329): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.h(326): error C2065: 'm': undeclared identifier +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.h(326): error C2614: 'Graph_lib::Marked_polyline': illegal member initialization: 'mark' is not a base or member +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.h(333): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.h(333): error C2143: syntax error: missing ',' before '&' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.h(333): error C2065: 'm': undeclared identifier +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.h(338): error C3861: 'string': identifier not found +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.h(338): error C2280: 'Graph_lib::Marks::Marks(const Graph_lib::Marks &)': attempting to reference a deleted function +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.h(335): note: compiler has generated 'Graph_lib::Marks::Marks' here +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.h(335): note: 'Graph_lib::Marks::Marks(const Graph_lib::Marks &)': function was implicitly deleted because a base class invokes a deleted or inaccessible function 'Graph_lib::Marked_polyline::Marked_polyline(const Graph_lib::Marked_polyline &)' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.h(330): note: 'Graph_lib::Marked_polyline::Marked_polyline(const Graph_lib::Marked_polyline &)': function was implicitly deleted because a base class invokes a deleted or inaccessible function 'Graph_lib::Open_polyline::Open_polyline(const Graph_lib::Open_polyline &)' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.h(220): note: 'Graph_lib::Open_polyline::Open_polyline(const Graph_lib::Open_polyline &)': function was implicitly deleted because a base class invokes a deleted or inaccessible function 'Graph_lib::Shape::Shape(const Graph_lib::Shape &)' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.h(155): note: 'Graph_lib::Shape::Shape(const Graph_lib::Shape &)': function was explicitly deleted +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.h(361): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.h(361): error C2143: syntax error: missing ',' before '&' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.h(364): error C2061: syntax error: identifier 'string' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(10): error C2661: 'fl_line': no overloaded function takes 1 arguments +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(10): note: while trying to match the argument list '()' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(27): error C7568: argument list missing after assumed function template 'pair' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(27): error C2062: type '' unexpected +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(28): error C2143: syntax error: missing ';' before '{' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(28): error C2447: '{': missing function header (old-style formal list?) +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(54): error C7568: argument list missing after assumed function template 'pair' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(54): error C3861: 'line_intersect': identifier not found +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(66): error C3861: 'error': identifier not found +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(68): error C3861: 'line_intersect': identifier not found +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(70): error C3861: 'error': identifier not found +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(76): error C3861: 'error': identifier not found +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(86): error C3861: 'error': identifier not found +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(135): error C2065: 'lab': undeclared identifier +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(143): error C3861: 'error': identifier not found +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(144): error C3861: 'error': identifier not found +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(168): error C2061: syntax error: identifier 'string' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(169): error C2065: 'lab': undeclared identifier +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(171): error C3861: 'error': identifier not found +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(204): error C3861: 'error': identifier not found +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(263): error C2065: 'string': undeclared identifier +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(263): error C2146: syntax error: missing ';' before identifier 'm' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(263): error C3861: 'm': identifier not found +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(264): error C2065: 'm': undeclared identifier +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(271): error C2065: 'mark': undeclared identifier +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(271): error C2065: 'mark': undeclared identifier +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(271): error C2660: 'Graph_lib::draw_mark': function does not take 1 arguments +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(259): note: see declaration of 'Graph_lib::draw_mark' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(271): note: while trying to match the argument list '(Graph_lib::Point)' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(282): error C2065: 'string': undeclared identifier +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(282): error C2923: 'std::map': 'string' is not a valid template type argument for parameter '_Kty' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(282): note: see declaration of 'string' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(282): error C2976: 'std::map': too few template arguments +C:\Program Files\Microsoft Visual Studio\18\Community\VC\Tools\MSVC\14.51.36231\include\map(72): note: see declaration of 'std::map' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(282): error C2641: cannot deduce template arguments for 'std::map' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(282): note: 'std::map': no matching overloaded function found +C:\Program Files\Microsoft Visual Studio\18\Community\VC\Tools\MSVC\14.51.36231\include\map(374): note: could be 'std::map::value_type>::type>::type,tuple_element<1,iterator_traits<_Ty>::value_type>::type,_Pr,_Alloc> std::map(_Iter,_Iter,_Pr,_Alloc)' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(282): note: 'std::map::value_type>::type>::type,tuple_element<1,iterator_traits<_Ty>::value_type>::type,_Pr,_Alloc> std::map(_Iter,_Iter,_Pr,_Alloc)': expects 4 arguments - 0 provided +C:\Program Files\Microsoft Visual Studio\18\Community\VC\Tools\MSVC\14.51.36231\include\map(378): note: or 'std::map<_Kty,_Ty,_Pr,_Alloc> std::map(std::initializer_list>,_Pr,_Alloc)' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(282): note: 'std::map<_Kty,_Ty,_Pr,_Alloc> std::map(std::initializer_list>,_Pr,_Alloc)': expects 3 arguments - 0 provided +C:\Program Files\Microsoft Visual Studio\18\Community\VC\Tools\MSVC\14.51.36231\include\map(381): note: or 'std::map::value_type>::type>::type,tuple_element<1,iterator_traits<_Ty>::value_type>::type,std::less::value_type>::type>::type>,_Alloc> std::map(_Iter,_Iter,_Alloc)' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(282): note: 'std::map::value_type>::type>::type,tuple_element<1,iterator_traits<_Ty>::value_type>::type,std::less::value_type>::type>::type>,_Alloc> std::map(_Iter,_Iter,_Alloc)': expects 3 arguments - 0 provided +C:\Program Files\Microsoft Visual Studio\18\Community\VC\Tools\MSVC\14.51.36231\include\map(384): note: or 'std::map<_Kty,_Ty,std::less<_Ty>,_Alloc> std::map(std::initializer_list>,_Alloc)' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(282): note: 'std::map<_Kty,_Ty,std::less<_Ty>,_Alloc> std::map(std::initializer_list>,_Alloc)': expects 2 arguments - 0 provided +C:\Program Files\Microsoft Visual Studio\18\Community\VC\Tools\MSVC\14.51.36231\include\map(389): note: or 'std::map::first_type>::type,::std::ranges::range_value_t<_Rng>::second_type,_Pr,_Alloc> std::map(std::from_range_t,_Rng &&,_Pr,_Alloc)' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(282): note: 'std::map::first_type>::type,::std::ranges::range_value_t<_Rng>::second_type,_Pr,_Alloc> std::map(std::from_range_t,_Rng &&,_Pr,_Alloc)': expects 4 arguments - 0 provided +C:\Program Files\Microsoft Visual Studio\18\Community\VC\Tools\MSVC\14.51.36231\include\map(393): note: or 'std::map::first_type>::type,::std::ranges::range_value_t<_Rng>::second_type,std::less::first_type>::type>,_Alloc> std::map(std::from_range_t,_Rng &&,_Alloc)' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(282): note: 'std::map::first_type>::type,::std::ranges::range_value_t<_Rng>::second_type,std::less::first_type>::type>,_Alloc> std::map(std::from_range_t,_Rng &&,_Alloc)': expects 3 arguments - 0 provided +C:\Program Files\Microsoft Visual Studio\18\Community\VC\Tools\MSVC\14.51.36231\include\map(334): note: or 'std::map<_Kty,_Ty,_Pr,_Alloc> std::map(std::initializer_list>,const _Pr &,const _Tree>::allocator_type &)' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(282): note: 'std::map<_Kty,_Ty,_Pr,_Alloc> std::map(std::initializer_list>,const _Pr &,const _Tree>::allocator_type &)': expects 3 arguments - 0 provided +C:\Program Files\Microsoft Visual Studio\18\Community\VC\Tools\MSVC\14.51.36231\include\map(330): note: or 'std::map<_Kty,_Ty,_Pr,_Alloc> std::map(std::initializer_list>,const _Tree>::allocator_type &)' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(282): note: 'std::map<_Kty,_Ty,_Pr,_Alloc> std::map(std::initializer_list>,const _Tree>::allocator_type &)': expects 2 arguments - 0 provided +C:\Program Files\Microsoft Visual Studio\18\Community\VC\Tools\MSVC\14.51.36231\include\map(326): note: or 'std::map<_Kty,_Ty,_Pr,_Alloc> std::map(std::initializer_list>,const _Pr &)' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(282): note: 'std::map<_Kty,_Ty,_Pr,_Alloc> std::map(std::initializer_list>,const _Pr &)': expects 2 arguments - 0 provided +C:\Program Files\Microsoft Visual Studio\18\Community\VC\Tools\MSVC\14.51.36231\include\map(322): note: or 'std::map<_Kty,_Ty,_Pr,_Alloc> std::map(std::initializer_list>)' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(282): note: 'std::map<_Kty,_Ty,_Pr,_Alloc> std::map(std::initializer_list>)': expects 1 arguments - 0 provided +C:\Program Files\Microsoft Visual Studio\18\Community\VC\Tools\MSVC\14.51.36231\include\map(167): note: or 'std::map<_Kty,_Ty,_Pr,_Alloc> std::map(std::map<_Kty,_Ty,_Pr,_Alloc> &&,const _Tree>::allocator_type &)' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(282): note: 'std::map<_Kty,_Ty,_Pr,_Alloc> std::map(std::map<_Kty,_Ty,_Pr,_Alloc> &&,const _Tree>::allocator_type &)': expects 2 arguments - 0 provided +C:\Program Files\Microsoft Visual Studio\18\Community\VC\Tools\MSVC\14.51.36231\include\map(165): note: or 'std::map<_Kty,_Ty,_Pr,_Alloc> std::map(std::map<_Kty,_Ty,_Pr,_Alloc> &&)' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(282): note: 'std::map<_Kty,_Ty,_Pr,_Alloc> std::map(std::map<_Kty,_Ty,_Pr,_Alloc> &&)': expects 1 arguments - 0 provided +C:\Program Files\Microsoft Visual Studio\18\Community\VC\Tools\MSVC\14.51.36231\include\map(155): note: or 'std::map<_Kty,_Ty,_Pr,_Alloc> std::map(std::from_range_t,_Rng &&,const _Tree>::allocator_type &)' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(282): note: 'std::map<_Kty,_Ty,_Pr,_Alloc> std::map(std::from_range_t,_Rng &&,const _Tree>::allocator_type &)': expects 3 arguments - 0 provided +C:\Program Files\Microsoft Visual Studio\18\Community\VC\Tools\MSVC\14.51.36231\include\map(150): note: or 'std::map<_Kty,_Ty,_Pr,_Alloc> std::map(std::from_range_t,_Rng &&,const _Pr &,const _Tree>::allocator_type &)' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(282): note: 'std::map<_Kty,_Ty,_Pr,_Alloc> std::map(std::from_range_t,_Rng &&,const _Pr &,const _Tree>::allocator_type &)': expects 4 arguments - 0 provided +C:\Program Files\Microsoft Visual Studio\18\Community\VC\Tools\MSVC\14.51.36231\include\map(145): note: or 'std::map<_Kty,_Ty,_Pr,_Alloc> std::map(std::from_range_t,_Rng &&,const _Pr &)' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(282): note: 'std::map<_Kty,_Ty,_Pr,_Alloc> std::map(std::from_range_t,_Rng &&,const _Pr &)': expects 3 arguments - 0 provided +C:\Program Files\Microsoft Visual Studio\18\Community\VC\Tools\MSVC\14.51.36231\include\map(140): note: or 'std::map<_Kty,_Ty,_Pr,_Alloc> std::map(std::from_range_t,_Rng &&)' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(282): note: 'std::map<_Kty,_Ty,_Pr,_Alloc> std::map(std::from_range_t,_Rng &&)': expects 2 arguments - 0 provided +C:\Program Files\Microsoft Visual Studio\18\Community\VC\Tools\MSVC\14.51.36231\include\map(134): note: or 'std::map<_Kty,_Ty,_Pr,_Alloc> std::map(_Iter,_Iter,const _Pr &,const _Tree>::allocator_type &)' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(282): note: 'std::map<_Kty,_Ty,_Pr,_Alloc> std::map(_Iter,_Iter,const _Pr &,const _Tree>::allocator_type &)': expects 4 arguments - 0 provided +C:\Program Files\Microsoft Visual Studio\18\Community\VC\Tools\MSVC\14.51.36231\include\map(129): note: or 'std::map<_Kty,_Ty,_Pr,_Alloc> std::map(_Iter,_Iter,const _Tree>::allocator_type &)' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(282): note: 'std::map<_Kty,_Ty,_Pr,_Alloc> std::map(_Iter,_Iter,const _Tree>::allocator_type &)': expects 3 arguments - 0 provided +C:\Program Files\Microsoft Visual Studio\18\Community\VC\Tools\MSVC\14.51.36231\include\map(124): note: or 'std::map<_Kty,_Ty,_Pr,_Alloc> std::map(_Iter,_Iter,const _Pr &)' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(282): note: 'std::map<_Kty,_Ty,_Pr,_Alloc> std::map(_Iter,_Iter,const _Pr &)': expects 3 arguments - 0 provided +C:\Program Files\Microsoft Visual Studio\18\Community\VC\Tools\MSVC\14.51.36231\include\map(119): note: or 'std::map<_Kty,_Ty,_Pr,_Alloc> std::map(_Iter,_Iter)' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(282): note: 'std::map<_Kty,_Ty,_Pr,_Alloc> std::map(_Iter,_Iter)': expects 2 arguments - 0 provided +C:\Program Files\Microsoft Visual Studio\18\Community\VC\Tools\MSVC\14.51.36231\include\map(116): note: or 'std::map<_Kty,_Ty,_Pr,_Alloc> std::map(const _Pr &,const _Tree>::allocator_type &)' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(282): note: 'std::map<_Kty,_Ty,_Pr,_Alloc> std::map(const _Pr &,const _Tree>::allocator_type &)': expects 2 arguments - 0 provided +C:\Program Files\Microsoft Visual Studio\18\Community\VC\Tools\MSVC\14.51.36231\include\map(114): note: or 'std::map<_Kty,_Ty,_Pr,_Alloc> std::map(const _Pr &)' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(282): note: 'std::map<_Kty,_Ty,_Pr,_Alloc> std::map(const _Pr &)': expects 1 arguments - 0 provided +C:\Program Files\Microsoft Visual Studio\18\Community\VC\Tools\MSVC\14.51.36231\include\map(112): note: or 'std::map<_Kty,_Ty,_Pr,_Alloc> std::map(const std::map<_Kty,_Ty,_Pr,_Alloc> &,const _Tree>::allocator_type &)' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(282): note: 'std::map<_Kty,_Ty,_Pr,_Alloc> std::map(const std::map<_Kty,_Ty,_Pr,_Alloc> &,const _Tree>::allocator_type &)': expects 2 arguments - 0 provided +C:\Program Files\Microsoft Visual Studio\18\Community\VC\Tools\MSVC\14.51.36231\include\map(110): note: or 'std::map<_Kty,_Ty,_Pr,_Alloc> std::map(const std::map<_Kty,_Ty,_Pr,_Alloc> &)' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(282): note: 'std::map<_Kty,_Ty,_Pr,_Alloc> std::map(const std::map<_Kty,_Ty,_Pr,_Alloc> &)': expects 1 arguments - 0 provided +C:\Program Files\Microsoft Visual Studio\18\Community\VC\Tools\MSVC\14.51.36231\include\map(108): note: or 'std::map<_Kty,_Ty,_Pr,_Alloc> std::map(const _Tree>::allocator_type &)' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(282): note: 'std::map<_Kty,_Ty,_Pr,_Alloc> std::map(const _Tree>::allocator_type &)': expects 1 arguments - 0 provided +C:\Program Files\Microsoft Visual Studio\18\Community\VC\Tools\MSVC\14.51.36231\include\map(106): note: or 'std::map<_Kty,_Ty,_Pr,_Alloc> std::map(void)' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(282): note: 'std::map<_Kty,_Ty,_Pr,_Alloc> std::map(void)': could not deduce template argument for '_Kty' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(282): note: 'std::map<_Kty,_Ty,_Pr,_Alloc> std::map(void)': could not deduce template argument for '_Ty' +C:\Program Files\Microsoft Visual Studio\18\Community\VC\Tools\MSVC\14.51.36231\include\map(72): note: or 'std::map<_Kty,_Ty,_Pr,_Alloc> std::map(std::map<_Kty,_Ty,_Pr,_Alloc>)' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(282): note: 'std::map<_Kty,_Ty,_Pr,_Alloc> std::map(std::map<_Kty,_Ty,_Pr,_Alloc>)': expects 1 arguments - 0 provided +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(286): error C2678: binary '[': no operator found which takes a left-hand operand of type 'std::map' (or there is no acceptable conversion) +C:\Program Files\Microsoft Visual Studio\18\Community\VC\Tools\MSVC\14.51.36231\include\map(345): note: could be '_Ty &std::map<_Kty,_Ty,_Pr,_Alloc>::operator [](const _Kty &)' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(286): note: '_Ty &std::map<_Kty,_Ty,_Pr,_Alloc>::operator [](const _Kty &)': cannot convert 'this' pointer from 'std::map' to 'std::map<_Kty,_Ty,_Pr,_Alloc> &' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(286): note: Reason: cannot convert from 'std::map' to 'std::map<_Kty,_Ty,_Pr,_Alloc>' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(286): note: Conversion requires a second user-defined-conversion operator or constructor +C:\Program Files\Microsoft Visual Studio\18\Community\VC\Tools\MSVC\14.51.36231\include\map(174): note: or '_Ty &std::map<_Kty,_Ty,_Pr,_Alloc>::operator [](_Kty &&)' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(286): note: '_Ty &std::map<_Kty,_Ty,_Pr,_Alloc>::operator [](_Kty &&)': cannot convert 'this' pointer from 'std::map' to 'std::map<_Kty,_Ty,_Pr,_Alloc> &' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(286): note: Reason: cannot convert from 'std::map' to 'std::map<_Kty,_Ty,_Pr,_Alloc>' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(286): note: Conversion requires a second user-defined-conversion operator or constructor +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(286): note: while trying to match the argument list '(std::map, const char [4])' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(287): error C2678: binary '[': no operator found which takes a left-hand operand of type 'std::map' (or there is no acceptable conversion) +C:\Program Files\Microsoft Visual Studio\18\Community\VC\Tools\MSVC\14.51.36231\include\map(345): note: could be '_Ty &std::map<_Kty,_Ty,_Pr,_Alloc>::operator [](const _Kty &)' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(287): note: '_Ty &std::map<_Kty,_Ty,_Pr,_Alloc>::operator [](const _Kty &)': cannot convert 'this' pointer from 'std::map' to 'std::map<_Kty,_Ty,_Pr,_Alloc> &' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(287): note: Reason: cannot convert from 'std::map' to 'std::map<_Kty,_Ty,_Pr,_Alloc>' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(287): note: Conversion requires a second user-defined-conversion operator or constructor +C:\Program Files\Microsoft Visual Studio\18\Community\VC\Tools\MSVC\14.51.36231\include\map(174): note: or '_Ty &std::map<_Kty,_Ty,_Pr,_Alloc>::operator [](_Kty &&)' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(287): note: '_Ty &std::map<_Kty,_Ty,_Pr,_Alloc>::operator [](_Kty &&)': cannot convert 'this' pointer from 'std::map' to 'std::map<_Kty,_Ty,_Pr,_Alloc> &' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(287): note: Reason: cannot convert from 'std::map' to 'std::map<_Kty,_Ty,_Pr,_Alloc>' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(287): note: Conversion requires a second user-defined-conversion operator or constructor +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(287): note: while trying to match the argument list '(std::map, const char [4])' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(288): error C2678: binary '[': no operator found which takes a left-hand operand of type 'std::map' (or there is no acceptable conversion) +C:\Program Files\Microsoft Visual Studio\18\Community\VC\Tools\MSVC\14.51.36231\include\map(345): note: could be '_Ty &std::map<_Kty,_Ty,_Pr,_Alloc>::operator [](const _Kty &)' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(288): note: '_Ty &std::map<_Kty,_Ty,_Pr,_Alloc>::operator [](const _Kty &)': cannot convert 'this' pointer from 'std::map' to 'std::map<_Kty,_Ty,_Pr,_Alloc> &' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(288): note: Reason: cannot convert from 'std::map' to 'std::map<_Kty,_Ty,_Pr,_Alloc>' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(288): note: Conversion requires a second user-defined-conversion operator or constructor +C:\Program Files\Microsoft Visual Studio\18\Community\VC\Tools\MSVC\14.51.36231\include\map(174): note: or '_Ty &std::map<_Kty,_Ty,_Pr,_Alloc>::operator [](_Kty &&)' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(288): note: '_Ty &std::map<_Kty,_Ty,_Pr,_Alloc>::operator [](_Kty &&)': cannot convert 'this' pointer from 'std::map' to 'std::map<_Kty,_Ty,_Pr,_Alloc> &' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(288): note: Reason: cannot convert from 'std::map' to 'std::map<_Kty,_Ty,_Pr,_Alloc>' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(288): note: Conversion requires a second user-defined-conversion operator or constructor +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(288): note: while trying to match the argument list '(std::map, const char [5])' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(289): error C2678: binary '[': no operator found which takes a left-hand operand of type 'std::map' (or there is no acceptable conversion) +C:\Program Files\Microsoft Visual Studio\18\Community\VC\Tools\MSVC\14.51.36231\include\map(345): note: could be '_Ty &std::map<_Kty,_Ty,_Pr,_Alloc>::operator [](const _Kty &)' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(289): note: '_Ty &std::map<_Kty,_Ty,_Pr,_Alloc>::operator [](const _Kty &)': cannot convert 'this' pointer from 'std::map' to 'std::map<_Kty,_Ty,_Pr,_Alloc> &' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(289): note: Reason: cannot convert from 'std::map' to 'std::map<_Kty,_Ty,_Pr,_Alloc>' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(289): note: Conversion requires a second user-defined-conversion operator or constructor +C:\Program Files\Microsoft Visual Studio\18\Community\VC\Tools\MSVC\14.51.36231\include\map(174): note: or '_Ty &std::map<_Kty,_Ty,_Pr,_Alloc>::operator [](_Kty &&)' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(289): note: '_Ty &std::map<_Kty,_Ty,_Pr,_Alloc>::operator [](_Kty &&)': cannot convert 'this' pointer from 'std::map' to 'std::map<_Kty,_Ty,_Pr,_Alloc> &' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(289): note: Reason: cannot convert from 'std::map' to 'std::map<_Kty,_Ty,_Pr,_Alloc>' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(289): note: Conversion requires a second user-defined-conversion operator or constructor +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(289): note: while trying to match the argument list '(std::map, const char [5])' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(290): error C2678: binary '[': no operator found which takes a left-hand operand of type 'std::map' (or there is no acceptable conversion) +C:\Program Files\Microsoft Visual Studio\18\Community\VC\Tools\MSVC\14.51.36231\include\map(345): note: could be '_Ty &std::map<_Kty,_Ty,_Pr,_Alloc>::operator [](const _Kty &)' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(290): note: '_Ty &std::map<_Kty,_Ty,_Pr,_Alloc>::operator [](const _Kty &)': cannot convert 'this' pointer from 'std::map' to 'std::map<_Kty,_Ty,_Pr,_Alloc> &' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(290): note: Reason: cannot convert from 'std::map' to 'std::map<_Kty,_Ty,_Pr,_Alloc>' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(290): note: Conversion requires a second user-defined-conversion operator or constructor +C:\Program Files\Microsoft Visual Studio\18\Community\VC\Tools\MSVC\14.51.36231\include\map(174): note: or '_Ty &std::map<_Kty,_Ty,_Pr,_Alloc>::operator [](_Kty &&)' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(290): note: '_Ty &std::map<_Kty,_Ty,_Pr,_Alloc>::operator [](_Kty &&)': cannot convert 'this' pointer from 'std::map' to 'std::map<_Kty,_Ty,_Pr,_Alloc> &' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(290): note: Reason: cannot convert from 'std::map' to 'std::map<_Kty,_Ty,_Pr,_Alloc>' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(290): note: Conversion requires a second user-defined-conversion operator or constructor +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(290): note: while trying to match the argument list '(std::map, const char [4])' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(291): error C2678: binary '[': no operator found which takes a left-hand operand of type 'std::map' (or there is no acceptable conversion) +C:\Program Files\Microsoft Visual Studio\18\Community\VC\Tools\MSVC\14.51.36231\include\map(345): note: could be '_Ty &std::map<_Kty,_Ty,_Pr,_Alloc>::operator [](const _Kty &)' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(291): note: '_Ty &std::map<_Kty,_Ty,_Pr,_Alloc>::operator [](const _Kty &)': cannot convert 'this' pointer from 'std::map' to 'std::map<_Kty,_Ty,_Pr,_Alloc> &' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(291): note: Reason: cannot convert from 'std::map' to 'std::map<_Kty,_Ty,_Pr,_Alloc>' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(291): note: Conversion requires a second user-defined-conversion operator or constructor +C:\Program Files\Microsoft Visual Studio\18\Community\VC\Tools\MSVC\14.51.36231\include\map(174): note: or '_Ty &std::map<_Kty,_Ty,_Pr,_Alloc>::operator [](_Kty &&)' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(291): note: '_Ty &std::map<_Kty,_Ty,_Pr,_Alloc>::operator [](_Kty &&)': cannot convert 'this' pointer from 'std::map' to 'std::map<_Kty,_Ty,_Pr,_Alloc> &' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(291): note: Reason: cannot convert from 'std::map' to 'std::map<_Kty,_Ty,_Pr,_Alloc>' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(291): note: Conversion requires a second user-defined-conversion operator or constructor +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(291): note: while trying to match the argument list '(std::map, const char [4])' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(292): error C2678: binary '[': no operator found which takes a left-hand operand of type 'std::map' (or there is no acceptable conversion) +C:\Program Files\Microsoft Visual Studio\18\Community\VC\Tools\MSVC\14.51.36231\include\map(345): note: could be '_Ty &std::map<_Kty,_Ty,_Pr,_Alloc>::operator [](const _Kty &)' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(292): note: '_Ty &std::map<_Kty,_Ty,_Pr,_Alloc>::operator [](const _Kty &)': cannot convert 'this' pointer from 'std::map' to 'std::map<_Kty,_Ty,_Pr,_Alloc> &' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(292): note: Reason: cannot convert from 'std::map' to 'std::map<_Kty,_Ty,_Pr,_Alloc>' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(292): note: Conversion requires a second user-defined-conversion operator or constructor +C:\Program Files\Microsoft Visual Studio\18\Community\VC\Tools\MSVC\14.51.36231\include\map(174): note: or '_Ty &std::map<_Kty,_Ty,_Pr,_Alloc>::operator [](_Kty &&)' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(292): note: '_Ty &std::map<_Kty,_Ty,_Pr,_Alloc>::operator [](_Kty &&)': cannot convert 'this' pointer from 'std::map' to 'std::map<_Kty,_Ty,_Pr,_Alloc> &' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(292): note: Reason: cannot convert from 'std::map' to 'std::map<_Kty,_Ty,_Pr,_Alloc>' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(292): note: Conversion requires a second user-defined-conversion operator or constructor +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(292): note: while trying to match the argument list '(std::map, const char [4])' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(293): error C2678: binary '[': no operator found which takes a left-hand operand of type 'std::map' (or there is no acceptable conversion) +C:\Program Files\Microsoft Visual Studio\18\Community\VC\Tools\MSVC\14.51.36231\include\map(345): note: could be '_Ty &std::map<_Kty,_Ty,_Pr,_Alloc>::operator [](const _Kty &)' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(293): note: '_Ty &std::map<_Kty,_Ty,_Pr,_Alloc>::operator [](const _Kty &)': cannot convert 'this' pointer from 'std::map' to 'std::map<_Kty,_Ty,_Pr,_Alloc> &' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(293): note: Reason: cannot convert from 'std::map' to 'std::map<_Kty,_Ty,_Pr,_Alloc>' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(293): note: Conversion requires a second user-defined-conversion operator or constructor +C:\Program Files\Microsoft Visual Studio\18\Community\VC\Tools\MSVC\14.51.36231\include\map(174): note: or '_Ty &std::map<_Kty,_Ty,_Pr,_Alloc>::operator [](_Kty &&)' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(293): note: '_Ty &std::map<_Kty,_Ty,_Pr,_Alloc>::operator [](_Kty &&)': cannot convert 'this' pointer from 'std::map' to 'std::map<_Kty,_Ty,_Pr,_Alloc> &' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(293): note: Reason: cannot convert from 'std::map' to 'std::map<_Kty,_Ty,_Pr,_Alloc>' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(293): note: Conversion requires a second user-defined-conversion operator or constructor +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(293): note: while trying to match the argument list '(std::map, const char [4])' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(297): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(297): error C2143: syntax error: missing ',' before '&' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(302): error C2653: 'string': is not a class or namespace name +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(302): error C2065: 'const_iterator': undeclared identifier +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(302): error C2146: syntax error: missing ';' before identifier 'p' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(302): error C2065: 'p': undeclared identifier +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(302): error C2065: 's': undeclared identifier +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(302): error C2065: 's': undeclared identifier +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(302): error C3861: 'find': identifier not found +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(303): error C2065: 'p': undeclared identifier +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(303): error C2065: 's': undeclared identifier +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(305): error C2146: syntax error: missing ';' before identifier 'suf' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(305): error C2065: 'p': undeclared identifier +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(305): error C2065: 's': undeclared identifier +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(305): error C3861: 'suf': identifier not found +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(306): error C2065: 'suf': undeclared identifier +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(309): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(309): error C2143: syntax error: missing ',' before '&' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(312): error C2065: 'ifstream': undeclared identifier +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(312): error C2146: syntax error: missing ';' before identifier 'ff' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(312): error C2065: 's': undeclared identifier +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(312): error C3861: 'ff': identifier not found +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(313): error C2065: 'ff': undeclared identifier +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(319): error C2061: syntax error: identifier 'string' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(320): error C2665: 'Graph_lib::Text::Text': no overloaded function could convert all the argument types +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.h(245): note: could be 'Graph_lib::Text::Text(Graph_lib::Point,const int)' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(320): note: 'Graph_lib::Text::Text(Graph_lib::Point,const int)': cannot convert argument 2 from 'const char [1]' to 'const int' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(320): note: There is no context in which this conversion is possible +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(320): note: while trying to match the argument list '(Graph_lib::Point, const char [1])' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(324): error C2065: 's': undeclared identifier +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(325): error C2065: 's': undeclared identifier +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(330): error C2065: 'e': undeclared identifier +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.cpp(330): fatal error C1003: error count exceeds 100; stopping compilation +[7/10] Building CXX object CMakeFiles\ppp.dir\Simple_window.cpp.obj +FAILED: [code=2] CMakeFiles/ppp.dir/Simple_window.cpp.obj +C:\PROGRA~1\MIB055~1\18\COMMUN~1\VC\Tools\MSVC\1451~1.362\bin\Hostx86\x64\cl.exe /nologo /TP -DLIBJPEG_STATIC -DXML_STATIC -D_MBCS -IC:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp -external:IC:\Users\WouterBeek\.conan2\p\b\fltk69eccc2d4492e\p\include -external:W0 /DWIN32 /D_WINDOWS /EHsc /Ob0 /Od -std:c++latest -MDd -RTC1 -Zi /showIncludes @CMakeFiles\ppp.dir\Simple_window.cpp.obj.modmap /FoCMakeFiles\ppp.dir\Simple_window.cpp.obj /FdCMakeFiles\ppp.dir\ppp.pdb /FS -c C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Simple_window.cpp +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.h(159): error C2398: Element '1': conversion from 'Fl_Color' to 'int' requires a narrowing conversion +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Simple_window.cpp(11): error C2084: function 'Simple_window::Simple_window(Graph_lib::Point,int,int,const std::string &)' already has a body +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Simple_window.h(10): note: see previous definition of 'Simple_window::Simple_window' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Simple_window.cpp(21): error C2556: 'bool Simple_window::wait_for_button(void)': overloaded function differs only by return type from 'void Simple_window::wait_for_button(void)' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Simple_window.h(15): note: see declaration of 'Simple_window::wait_for_button' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Simple_window.cpp(21): error C2371: 'Simple_window::wait_for_button': redefinition; different basic types +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Simple_window.h(15): note: see declaration of 'Simple_window::wait_for_button' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Simple_window.cpp(21): error C2084: function 'void Simple_window::wait_for_button(void)' already has a body +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Simple_window.h(15): note: see previous definition of 'Simple_window::wait_for_button' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Simple_window.cpp(42): error C2084: function 'void Simple_window::cb_next(Graph_lib::Address,Graph_lib::Address)' already has a body +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Simple_window.h(29): note: see previous definition of 'Simple_window::cb_next' +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Simple_window.cpp(50): error C2084: function 'void Simple_window::next(void)' already has a body +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Simple_window.h(35): note: see previous definition of 'Simple_window::next' +[8/10] Building CXX object CMakeFiles\ppp.dir\Window.cpp.obj +FAILED: [code=2] CMakeFiles/ppp.dir/Window.cpp.obj +C:\PROGRA~1\MIB055~1\18\COMMUN~1\VC\Tools\MSVC\1451~1.362\bin\Hostx86\x64\cl.exe /nologo /TP -DLIBJPEG_STATIC -DXML_STATIC -D_MBCS -IC:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp -external:IC:\Users\WouterBeek\.conan2\p\b\fltk69eccc2d4492e\p\include -external:W0 /DWIN32 /D_WINDOWS /EHsc /Ob0 /Od -std:c++latest -MDd -RTC1 -Zi /showIncludes @CMakeFiles\ppp.dir\Window.cpp.obj.modmap /FoCMakeFiles\ppp.dir\Window.cpp.obj /FdCMakeFiles\ppp.dir\ppp.pdb /FS -c C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Window.cpp +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.h(159): error C2398: Element '1': conversion from 'Fl_Color' to 'int' requires a narrowing conversion +[9/10] Building CXX object CMakeFiles\ppp.dir\GUI.cpp.obj +FAILED: [code=2] CMakeFiles/ppp.dir/GUI.cpp.obj +C:\PROGRA~1\MIB055~1\18\COMMUN~1\VC\Tools\MSVC\1451~1.362\bin\Hostx86\x64\cl.exe /nologo /TP -DLIBJPEG_STATIC -DXML_STATIC -D_MBCS -IC:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp -external:IC:\Users\WouterBeek\.conan2\p\b\fltk69eccc2d4492e\p\include -external:W0 /DWIN32 /D_WINDOWS /EHsc /Ob0 /Od -std:c++latest -MDd -RTC1 -Zi /showIncludes @CMakeFiles\ppp.dir\GUI.cpp.obj.modmap /FoCMakeFiles\ppp.dir\GUI.cpp.obj /FdCMakeFiles\ppp.dir\ppp.pdb /FS -c C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\GUI.cpp +C:\Users\WouterBeek\source\repos\Programming-_Principles_and_Practice_Using_Cpp\Graph.h(159): error C2398: Element '1': conversion from 'Fl_Color' to 'int' requires a narrowing conversion +ninja: build stopped: subcommand failed. +``` From 6b498781cc5f0ccacf03fc5bc4471cf26c9aabd4 Mon Sep 17 00:00:00 2001 From: Wouter Beek Date: Sat, 20 Jun 2026 11:43:49 +0200 Subject: [PATCH 02/19] FIXED: Manual integration of files GUI.h and Gui.h (these are considered the same file on Windows). In the original code, these files seem to contain almost the same content, bit with small variations. --- GUI.cpp | 7 +-- GUI.h | 133 ------------------------------------------------ GUI.hpp | 128 ++++++++++++++++++++++++++++++++++++++++++++++ Gui.h | 115 ----------------------------------------- Simple_window.h | 2 +- Window.cpp | 2 +- Window.h | 2 +- 7 files changed, 132 insertions(+), 257 deletions(-) delete mode 100644 GUI.h create mode 100644 GUI.hpp delete mode 100644 Gui.h diff --git a/GUI.cpp b/GUI.cpp index b0b2d81..5e5942a 100644 --- a/GUI.cpp +++ b/GUI.cpp @@ -1,4 +1,4 @@ -#include "GUI.h" +#include "GUI.hpp" #include "std_lib_facilities.h" #include @@ -52,11 +52,6 @@ void Out_box::attach(Window& win) own = &win; } -Menu::Menu(Point xy, int w, int h, Kind kk, const string& s) -:Widget(xy,w,h,s,0), k(kk), offset(0) -{ -} - int Menu::attach(Button& b) { b.width = width; diff --git a/GUI.h b/GUI.h deleted file mode 100644 index 0c7c78c..0000000 --- a/GUI.h +++ /dev/null @@ -1,133 +0,0 @@ - -// -// This is a GUI support code to the chapters 12-16 of the book -// "Programming -- Principles and Practice Using C++" by Bjarne Stroustrup -// - -#ifndef GUI_GUARD -#define GUI_GUARD - -#include "Window.h" -#include "Graph.h" - -namespace Graph_lib { - -//------------------------------------------------------------------------------ - - typedef void* Address; // Address is a synonym for void* - typedef void(*Callback)(Address, Address); // FLTK's required function type for all callbacks - -//------------------------------------------------------------------------------ - - template W& reference_to(Address pw) - // treat an address as a reference to a W - { - return *static_cast(pw); - } - -//------------------------------------------------------------------------------ - - class Widget { - // Widget is a handle to an Fl_widget - it is *not* an Fl_widget - // We try to keep our interface classes at arm's length from FLTK - public: - Widget(Point xy, int w, int h, const string& s, Callback cb) - : loc(xy), width(w), height(h), label(s), do_it(cb) - {} - - virtual void move(int dx,int dy) { hide(); pw->position(loc.x+=dx, loc.y+=dy); show(); } - virtual void hide() { pw->hide(); } - virtual void show() { pw->show(); } - virtual void attach(Window&) = 0; - - Point loc; - int width; - int height; - string label; - Callback do_it; - - virtual ~Widget() { } - - protected: - Window* own; // every Widget belongs to a Window - Fl_Widget* pw; // connection to the FLTK Widget - private: - Widget& operator=(const Widget&); // don't copy Widgets - Widget(const Widget&); - }; - -//------------------------------------------------------------------------------ - - struct Button : Widget { - Button(Point xy, int w, int h, const string& label, Callback cb) - : Widget(xy,w,h,label,cb) - {} - - void attach(Window&); - }; - -//------------------------------------------------------------------------------ - - struct In_box : Widget { - In_box(Point xy, int w, int h, const string& s) - :Widget(xy,w,h,s,0) { } - int get_int(); - string get_string(); - - void attach(Window& win); - }; - -//------------------------------------------------------------------------------ - - struct Out_box : Widget { - Out_box(Point xy, int w, int h, const string& s) - :Widget(xy,w,h,s,0) { } - void put(int); - void put(const string&); - - void attach(Window& win); - }; - -//------------------------------------------------------------------------------ - - struct Menu : Widget { - enum Kind { horizontal, vertical }; - Menu(Point xy, int w, int h, Kind kk, const string& label) - : Widget(xy,w,h,label,0), k(kk), offset(0) - {} - - Vector_ref