我正在尝试执行以下操作:
创建一个批处理文件。
获取环境变量。
写入文件Env变量+一堆着色器文件名以生成SPIR-V代码。
关闭文件。
void ResourceLoader::GenerateBatchFile(std::vector<std::string> fileNames)
{
std::ofstream file;
file.open("CompileShaders.Bat");
const std::string vulkansdk_name = getenv("VULKAN_SDK");
std::string vulkansdk_name_replaced;
if (checkIfCharacterExists(vulkansdk_name, '\\'))
{
vulkansdk_name_replaced = ReplaceCharacter(vulkansdk_name, '/', '\\' );
}
else
{
vulkansdk_name_replaced = vulkansdk_name;
}
//Generate SPIR-V files for all the mentioned Shader file names
for (int i = 0; i < fileNames.size(); ++i)
{
file << vulkansdk_name_replaced + "/Bin/glslangValidator.exe -V Shaders/" + fileNames[i] + " -o Shaders/BinaryCode/" + fileNames[i] + ".spv\n";
}
file.close();
return;
}
我在这行出现错误
file << vulkansdk_name_replaced + "/Bin/glslangValidator.exe -V Shaders/" + fileNames[i] + " -o Shaders/BinaryCode/" + fileNames[i] + ".spv\n";
编译器说:
错误C2679二进制'<<':找不到带右运算符的运算符-类型'std :: basic_string,std :: allocator>'(或没有可接受的转换)VKRenderer c:*** prj \ vulkanrenderer \ vkrenderer \ vkrenderer \ resourceloader.cpp 98
[当我将鼠标悬停在Visual Studio中的错误上时]
-没有运算符“ <<”与这些操作数匹配
我包括了
#include <windows.h>
#include <iostream>
#include <fstream>
奇怪的部分是我的代码在装有MS Visual Studio 16 2019的PC上运行,并且当前我正在工作的地方(即我的笔记本电脑)没有运行,并抛出了没有MS VS 16 2019的错误,而是MS VS 15 2017。
我被困住了,请告诉我哪里出了问题,它可以在我的PC上运行,但不能在使我感到困惑的笔记本电脑上运行。
感谢您阅读!
编辑:感谢“ Nicol Bolas”,这个问题得到解决。问题是我没有包含<string>
,而是包含了我认为可以使用的<cstring>
,但事实并非如此。