ifstream Нет такого файла или каталога C ++ - PullRequest
0 голосов
/ 21 января 2020

Поэтому я пытаюсь написать класс шейдеров на C ++, похожий на this . Это моя файловая структура:

| -- /source
|    | --  main.cpp
|    | -- /Shaders
|    |    | -- Shader.h
|    |    | -- shader.frag
|    |    | -- shader.vert

В моем основном. cpp файле я импортирую shaders.h. Shaders.h содержит класс shader, который считывает код шейдера из файлов shader.frag и shader.vert (или так и должно быть). Путь, который я передаю из main. cpp - это Shaders/shader.frag и Shaders/shader.vert, и я получаю ошибку No such file or directory.

Вот мой (или их) соответствующий код шейдера:

#ifndef SHADER_H
#define SHADER_H

#include <glad/glad.h>

#include <string>
#include <fstream>
#include <sstream>
#include <iostream>
Shader(const char* vertexPath, const char* fragmentPath)
    {
        // 1. retrieve the vertex/fragment source code from filePath
        std::string vertexCode;
        std::string fragmentCode;
        std::ifstream vShaderFile;
        std::ifstream fShaderFile;
        // ensure ifstream objects can throw exceptions:
        vShaderFile.exceptions(std::ifstream::failbit | std::ifstream::badbit);
        fShaderFile.exceptions(std::ifstream::failbit | std::ifstream::badbit);
        try
        {
            // open files
            vShaderFile.open(vertexPath); <------- this is where it is getting caught
            fShaderFile.open(fragmentPath); <---------- and i assume it would be here as well
            std::stringstream vShaderStream, fShaderStream;

            // read file's buffer contents into streams
            vShaderStream << vShaderFile.rdbuf();
            fShaderStream << fShaderFile.rdbuf();

            // close file handlers
            vShaderFile.close();
            fShaderFile.close();

            // convert stream into string
            vertexCode = vShaderStream.str();
            fragmentCode = fShaderStream.str();
        }
        catch (std::ifstream::failure e)
        {
            char buffer[256];
            strerror_s(buffer, 256, errno);
            printf("ERROR::SHADER::FILE_NOT_SUCCESFULLY_READ: %s\n", buffer);
        }
...

Я пробовал несколько вариантов пути. Я также пытался пройти абсолютный путь и постоянно получал ту же ошибку. Я был бы очень признателен за любую помощь с этим.

1 Ответ

0 голосов
/ 21 января 2020

Вам просто нужно включить библиотеку <fstream>.

...