@frilix
Иногда "творю"

Не открывается файл?

Доброго времени суток! Не удается открыть файл, пробовал по разному, но результат не меняется. Разрабатываю на Linux с использованием Clion.

Функция открытия:

static std::string LoadShader(const std::string& fileName)
{
    std::ifstream file;
    file.open((fileName).c_str());

    std::string output;
    std::string line;

    if(file.is_open())
    {
        while(file.good())
        {
            getline(file, line);
            output.append(line + "\n");
        }
    }
    else
    {
        std::cerr << "Unable to load shader: " << fileName << std::endl;
    }

    return output;
}


Конструктор:

Shader::Shader(const std::string &filename)
{
    m_program = glCreateProgram();
    m_shaders[0] = CreateShader(LoadShader(filename + ".vs"), GL_VERTEX_SHADER);
    m_shaders[1] = CreateShader(LoadShader(filename + ".fs"), GL_FRAGMENT_SHADER);
    ......
}


Создание объекта с открытием:
Shader shader(".res/basicShader");

Структура файлов:
4dbe6fc28790498185fac01fc51abb79.png

Cmake:
cmake_minimum_required(VERSION 3.6)
project(1_)

# includes FindSDL2.cmake
set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR})
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

find_package(SDL2 REQUIRED)
find_package(OpenGL REQUIRED)
find_package(GLEW REQUIRED)

if (GLEW_FOUND)
    include_directories(${GLEW_INCLUDE_DIRS})
    link_libraries(${GLEW_LIBRARIES})
endif()

include_directories(${SDL2_INCLUDE_DIR})

set(SOURCE_FILES main.cpp src/Display.cpp headers/Display.h src/Shader.cpp headers/Shader.h)
add_executable(1_ ${SOURCE_FILES})
target_link_libraries(1_ ${SDL2_LIBRARY})
target_link_libraries(1_ ${OPENGL_LIBRARY})


Права:
1f846600686f4608ac496555713af718.png

Буду признателен за помощь.
  • Вопрос задан
  • 338 просмотров
Решения вопроса 1
@frilix Автор вопроса
Иногда "творю"
Проблема была решена, нужно было указать рабочую директорию в Clion.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Adamos
@Adamos
В С++11 функция std::ifstream::open принимает аргументом std::string.
Калечить путь переводом c_str не нужно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы