Получение ошибок компиляции при использовании std::make_unique [закрыто]C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Получение ошибок компиляции при использовании std::make_unique [закрыто]

Сообщение Anonymous »


I am currently getting a list of compilation errors when attempting to run my program - I figure they specifically stem from a specific red-line funking things up however. The specific line is

context->states->Add(std::make_unique(context));

in the context of my game.cpp

#include "Game.h" void Game::initGfx() { this->gfxSettings = context->assets->getGraphicsSettings(); } void Game::initWindow() { if(gfxSettings->fullscreen) context->window->create( this->gfxSettings->resolution, this->gfxSettings->title, sf::Style::Fullscreen, this->gfxSettings->contextSettings); else context->window->create( this->gfxSettings->resolution, this->gfxSettings->title, sf::Style::Titlebar | sf::Style::Close, this->gfxSettings->contextSettings); context->window->setFramerateLimit(this->gfxSettings->frameRateLimit); context->window->setVerticalSyncEnabled(this->gfxSettings->verticalSync); } Game::Game() : context(std::make_shared()) { initGfx(); initWindow(); context->states->Add(std::make_unique(context)); } Game::~Game() { } void Game::run() { sf::Clock clock; sf::Time timeSinceLastFrame = sf::Time::Zero; while (context->window->isOpen()) { timeSinceLastFrame += clock.restart(); while (timeSinceLastFrame > TIME_PER_FRAME) { timeSinceLastFrame -= TIME_PER_FRAME; context->states->ProcessStateChange(); if (!context->states->isEmpty()) { context->states->GetCurrent()->ProcessInput(); context->states->GetCurrent()->Update(TIME_PER_FRAME); context->states->GetCurrent()->Draw(); } else { context->window->close(); } } } } Here is the main menu.h, as the constructor likely needs a look.

#ifndef CONCRETE_MAINMENU_H #define CONCRETE_MAINMENU_H #include #include "State.h" #include "Game.h" #include class MainMenu : public Engine::State { private: void initGfx(); std::shared_ptr context; sf::Text gameTitle; sf::Text playButton; sf::Text exitButton; bool isPlayButtonSelected; bool isPlayButtonPressed; bool isExitButtonSelected; bool isExitButtonPressed; public: MainMenu(std::shared_ptr &context); ~MainMenu(); void Init() override; void ProcessInput() override; void Update(const sf::Time& deltaTime) override; void Draw() override; }; #endif //CONCRETE_MAINMENU_H I'm unsure how specifically to go from here - I believe my usage of the the constructor matches up with its defintion. Here are the compilation errors I am recieving. I believe they are a result of the aforementioned error, but never too safe. I can provide more code as needed.
[1/6] Building CXX object CMakeFiles/Concrete.dir/src/main.cpp.obj FAILED: CMakeFiles/Concrete.dir/src/main.cpp.obj C:\PROGRA~1\JETBRA~1\CLION2~1.2\bin\mingw\bin\G__~1.EXE -DSFML_STATIC -IC:/Users/flame/Documents/projects/application-projects/Concrete/./include -IC:/Users/flame/Documents/projects/application-projects/Concrete/cmake-build-debug/_deps/sfml-src/include -g -fdiagnostics-color=always -MD -MT CMakeFiles/Concrete.dir/src/main.cpp.obj -MF CMakeFiles\Concrete.dir\src\main.cpp.obj.d -o CMakeFiles/Concrete.dir/src/main.cpp.obj -c C:/Users/flame/Documents/projects/application-projects/Concrete/src/main.cpp In file included from C:/Users/flame/Documents/projects/application-projects/Concrete/include/Game.h:21, from C:/Users/flame/Documents/projects/application-projects/Concrete/src/main.cpp:1: C:/Users/flame/Documents/projects/application-projects/Concrete/include/MainMenu.h:18:21: error: 'Context' was not declared in this scope; did you mean 'sf::Context'? 18 | std::shared_ptr context; | ^~~~~~~ | sf::Context In file included from C:/Users/flame/Documents/projects/application-projects/Concrete/cmake-build-debug/_deps/sfml-src/include/SFML/Window/Window.hpp:32, from C:/Users/flame/Documents/projects/application-projects/Concrete/cmake-build-debug/_deps/sfml-src/include/SFML/Graphics/RenderWindow.hpp:34, from C:/Users/flame/Documents/projects/application-projects/Concrete/include/Game.h:17: C:/Users/flame/Documents/projects/application-projects/Concrete/cmake-build-debug/_deps/sfml-src/include/SFML/Window/GlResource.hpp:38:7: note: 'sf::Context' declared here 38 | class Context; | ^~~~~~~ C:/Users/flame/Documents/projects/application-projects/Concrete/include/MainMenu.h:18:28: error: template argument 1 is invalid 18 | std::shared_ptr context; | ^ C:/Users/flame/Documents/projects/application-projects/Concrete/include/MainMenu.h:29:30: error: 'Context' was not declared in this scope; did you mean 'sf::Context'? 29 | MainMenu(std::shared_ptr &context); | ^~~~~~~ | sf::Context C:/Users/flame/Documents/projects/application-projects/Concrete/cmake-build-debug/_deps/sfml-src/include/SFML/Window/GlResource.hpp:38:7: note: 'sf::Context' declared here 38 | class Context; | ^~~~~~~ C:/Users/flame/Documents/projects/application-projects/Concrete/include/MainMenu.h:29:37: error: template argument 1 is invalid 29 | MainMenu(std::shared_ptr &context); | ^ [2/6] Building CXX object CMakeFiles/Concrete.dir/src/Game.cpp.obj FAILED: CMakeFiles/Concrete.dir/src/Game.cpp.obj C:\PROGRA~1\JETBRA~1\CLION2~1.2\bin\mingw\bin\G__~1.EXE -DSFML_STATIC -IC:/Users/flame/Documents/projects/application-projects/Concrete/./include -IC:/Users/flame/Documents/projects/application-projects/Concrete/cmake-build-debug/_deps/sfml-src/include -g -fdiagnostics-color=always -MD -MT CMakeFiles/Concrete.dir/src/Game.cpp.obj -MF CMakeFiles\Concrete.dir\src\Game.cpp.obj.d -o CMakeFiles/Concrete.dir/src/Game.cpp.obj -c C:/Users/flame/Documents/projects/application-projects/Concrete/src/Game.cpp In file included from C:/Users/flame/Documents/projects/application-projects/Concrete/include/Game.h:21, from C:/Users/flame/Documents/projects/application-projects/Concrete/src/Game.cpp:4: C:/Users/flame/Documents/projects/application-projects/Concrete/include/MainMenu.h:18:21: error: 'Context' was not declared in this scope; did you mean 'sf::Context'? 18 | std::shared_ptr context; | ^~~~~~~ | sf::Context In file included from C:/Users/flame/Documents/projects/application-projects/Concrete/cmake-build-debug/_deps/sfml-src/include/SFML/Window/Window.hpp:32, from C:/Users/flame/Documents/projects/application-projects/Concrete/cmake-build-debug/_deps/sfml-src/include/SFML/Graphics/RenderWindow.hpp:34, from C:/Users/flame/Documents/projects/application-projects/Concrete/include/Game.h:17: C:/Users/flame/Documents/projects/application-projects/Concrete/cmake-build-debug/_deps/sfml-src/include/SFML/Window/GlResource.hpp:38:7: note: 'sf::Context' declared here 38 | class Context; | ^~~~~~~ C:/Users/flame/Documents/projects/application-projects/Concrete/include/MainMenu.h:18:28: error: template argument 1 is invalid 18 | std::shared_ptr context; | ^ C:/Users/flame/Documents/projects/application-projects/Concrete/include/MainMenu.h:29:30: error: 'Context' was not declared in this scope; did you mean 'sf::Context'? 29 | MainMenu(std::shared_ptr &context); | ^~~~~~~ | sf::Context C:/Users/flame/Documents/projects/application-projects/Concrete/cmake-build-debug/_deps/sfml-src/include/SFML/Window/GlResource.hpp:38:7: note: 'sf::Context' declared here 38 | class Context; | ^~~~~~~ C:/Users/flame/Documents/projects/application-projects/Concrete/include/MainMenu.h:29:37: error: template argument 1 is invalid 29 | MainMenu(std::shared_ptr &context); | ^ In file included from C:/Program Files/JetBrains/CLion 2023.3.2/bin/mingw/lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++/memory:78, from C:/Users/flame/Documents/projects/application-projects/Concrete/include/Game.h:15: C:/Program Files/JetBrains/CLion 2023.3.2/bin/mingw/lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++/bits/unique_ptr.h: In instantiation of 'std::__detail::__unique_ptr_t std::make_unique(_Args&& ...) [with _Tp = MainMenu; _Args = {shared_ptr&}; __detail::__unique_ptr_t = __detail::__unique_ptr_t]': C:/Users/flame/Documents/projects/application-projects/Concrete/src/Game.cpp:37:52: required from here C:/Program Files/JetBrains/CLion 2023.3.2/bin/mingw/lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++/bits/unique_ptr.h:1070:30: error: no matching function for call to 'MainMenu::MainMenu(std::shared_ptr&)' 1070 | { return unique_ptr(new _Tp(std::forward(__args)...)); } | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C:/Users/flame/Documents/projects/application-projects/Concrete/include/MainMenu.h:29:5: note: candidate: 'MainMenu::MainMenu(int&)' 29 | MainMenu(std::shared_ptr &context); | ^~~~~~~~ C:/Users/flame/Documents/projects/application-projects/Concrete/include/MainMenu.h:29:40: note: no known conversion for argument 1 from 'std::shared_ptr' to 'int&' 29 | MainMenu(std::shared_ptr &context); | ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~ C:/Users/flame/Documents/projects/application-projects/Concrete/include/MainMenu.h:13:7: note: candidate: 'MainMenu::MainMenu(const MainMenu&)' 13 | class MainMenu : public Engine::State | ^~~~~~~~ C:/Users/flame/Documents/projects/application-projects/Concrete/include/MainMenu.h:13:7: note: no known conversion for argument 1 from 'std::shared_ptr' to 'const MainMenu&' [3/6] Building CXX object CMakeFiles/Concrete.dir/src/StateManager.cpp.obj [4/6] Building CXX object CMakeFiles/Concrete.dir/src/Abyss.cpp.obj FAILED: CMakeFiles/Concrete.dir/src/Abyss.cpp.obj C:\PROGRA~1\JETBRA~1\CLION2~1.2\bin\mingw\bin\G__~1.EXE -DSFML_STATIC -IC:/Users/flame/Documents/projects/application-projects/Concrete/./include -IC:/Users/flame/Documents/projects/application-projects/Concrete/cmake-build-debug/_deps/sfml-src/include -g -fdiagnostics-color=always -MD -MT CMakeFiles/Concrete.dir/src/Abyss.cpp.obj -MF CMakeFiles\Concrete.dir\src\Abyss.cpp.obj.d -o CMakeFiles/Concrete.dir/src/Abyss.cpp.obj -c C:/Users/flame/Documents/projects/application-projects/Concrete/src/Abyss.cpp In file included from C:/Users/flame/Documents/projects/application-projects/Concrete/include/Game.h:21, from C:/Users/flame/Documents/projects/application-projects/Concrete/include/Abyss.h:20, from C:/Users/flame/Documents/projects/application-projects/Concrete/src/Abyss.cpp:5: C:/Users/flame/Documents/projects/application-projects/Concrete/include/MainMenu.h:18:21: error: 'Context' was not declared in this scope; did you mean 'sf::Context'? 18 | std::shared_ptr context; | ^~~~~~~ | sf::Context In file included from C:/Users/flame/Documents/projects/application-projects/Concrete/cmake-build-debug/_deps/sfml-src/include/SFML/Graphics/Texture.hpp:33, from C:/Users/flame/Documents/projects/application-projects/Concrete/cmake-build-debug/_deps/sfml-src/include/SFML/Graphics/Font.hpp:33, from C:/Users/flame/Documents/projects/application-projects/Concrete/cmake-build-debug/_deps/sfml-src/include/SFML/Graphics/Text.hpp:34, from C:/Users/flame/Documents/projects/application-projects/Concrete/include/Abyss.h:13: C:/Users/flame/Documents/projects/application-projects/Concrete/cmake-build-debug/_deps/sfml-src/include/SFML/Window/GlResource.hpp:38:7: note: 'sf::Context' declared here 38 | class Context; | ^~~~~~~ C:/Users/flame/Documents/projects/application-projects/Concrete/include/MainMenu.h:18:28: error: template argument 1 is invalid 18 | std::shared_ptr context; | ^ C:/Users/flame/Documents/projects/application-projects/Concrete/include/MainMenu.h:29:30: error: 'Context' was not declared in this scope; did you mean 'sf::Context'? 29 | MainMenu(std::shared_ptr &context); | ^~~~~~~ | sf::Context C:/Users/flame/Documents/projects/application-projects/Concrete/cmake-build-debug/_deps/sfml-src/include/SFML/Window/GlResource.hpp:38:7: note: 'sf::Context' declared here 38 | class Context; | ^~~~~~~ C:/Users/flame/Documents/projects/application-projects/Concrete/include/MainMenu.h:29:37: error: template argument 1 is invalid 29 | MainMenu(std::shared_ptr &context); | ^ [5/6] Building CXX object CMakeFiles/Concrete.dir/src/MainMenu.cpp.obj

Источник: https://stackoverflow.com/questions/780 ... ake-unique
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»