Код: Выделить всё
// properties.hpp
#include
#include
class File
{
private:
std::filesystem::path m_filePath;
public:
explicit File();
~File();
void setPath(const std::string &p_fullPath);
};
// properties.cpp
#include "properties.hpp"
ff::prop::File::File() { this->setPath(""); }
ff::prop::File::~File() { this->setPath(""); }
void ff::prop::File::setPath(const std::string &p_fullPath)
{
using namespace std::filesystem;
if (p_fullPath == "")
this->m_filePath = path();
else
this->m_filePath = path(p_fullPath);
}
Код: Выделить всё
cmake_minimum_required(VERSION 3.26 FATAL_ERROR)
### cmake settings
set(CXX_STANDARD_REQUIRED ON)
set(CXX_STANDARD 20)
set(CMAKE_CXX_COMPILER /usr/bin/g++-10)
cmake_language(GET_MESSAGE_LOG_LEVEL VERBOSE)
message("The c++ version is ${CXX_STANDARD} ${CMAKE_CXX_COMPILER}")
set(CMAKE_CXX_FLAGS_DEBUG_INIT "-Wall -Wextra -std=c++20")
set(CMAKE_CXX_FLAGS_RELEASE_INIT "-Wall")
### project setttings
project(ff VERSION 0.0.1 LANGUAGES CXX)
add_executable(${PROJECT_NAME}
app/main.cpp
app/src/app.cpp
app/src/properties.cpp
)
Код: Выделить всё
The c++ version is 20 /usr/bin/g++-10
-- Build spdlog: 1.11.0
-- Build type: Debug
-- Configuring done (0.3s)
-- Generating done (0.1s)
-- Build files have been written to: /home/projects/ff/debug
Код: Выделить всё
[ 50%] Building CXX object CMakeFiles/ff.dir/app/main.cpp.o
In file included from /home/projects/ff/app/headers/events/import.hpp:9,
from /home/projects/ff/app/headers/windows/file_win.hpp:12,
from /home/projects/ff/app/headers/windows/app_win.hpp:12,
from /home/projects/ff/app/headers/app.hpp:6,
from /home/projects/ff/app/main.cpp:1:
/home/projects/ff/app/headers/properties.hpp:27:18: error: ‘filesystem’ in namespace ‘std’ does not name a type
27 | std::filesystem::path m_filePath;
| ^~~~~~~~~~
make[2]: *** [CMakeFiles/frameflow.dir/build.make:76: CMakeFiles/frameflow.dir/app/main.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:457: CMakeFiles/frameflow.dir/all] Error 2
make: *** [Makefile:136: all] Error 2
Мои вопросы:
- учитывая, что c++20 на g++10 поддерживает заголовок файловой системы, тогда почему он не компилируется
- почему он компилируется с экспериментальной/файловой системой
- что мне делать?
Код: Выделить всё
// a.hpp
#pragma once
#include
#include
namespace ff::prop
{
class File
{
private:
std::filesystem::path m_filePath;
public:
explicit File();
~File();
void setPath(const std::string &p_fullPath);
};
} // namespace ff::prop
Код: Выделить всё
// a.cpp
#include "a.hpp"
ff::prop::File::File() { this->setPath(""); }
ff::prop::File::~File() { this->setPath(""); }
void ff::prop::File::setPath(const std::string &p_fullPath)
{
using namespace std::filesystem;
if (p_fullPath == "")
this->m_filePath = path();
else
this->m_filePath = path(p_fullPath);
}
Код: Выделить всё
// main.cpp
#include "a.hpp"
int main() {
ff::prop::File f();
return EXIT_SUCCESS;
}
Чтобы уточните: -
после запуска cmake --system-information info.txt я получаю следующее CMAKE_CXX_COMPILER == "/usr/bin/c++", но версия компилятора использует 10.3.0 в оба случая.
Подробнее здесь: https://stackoverflow.com/questions/764 ... ke-and-g10
Мобильная версия