简体   繁体   English

“的std :: basic_string的 <char,std::char_traits<char> ,性病::分配器 <char> &gt; :: c_str&#39;:非标准语法; 使用&#39;&&#39;创建指向成员的指针

[英]'std::basic_string<char,std::char_traits<char>,std::allocator<char>>::c_str': non-standard syntax; use '&' to create a pointer to member

I'm trying to make a function that can read and compile opengl vertex and fragment shader files, but I'm getting this error: 我正在尝试创建一个可以读取和编译opengl顶点和片段着色器文件的函数,但是我收到了这个错误:

'std::basic_string<char,std::char_traits<char>,std::allocator<char>>::c_str': non-standard syntax; use '&' to create a pointer to member

I'm not quite sure how to fix it. 我不太清楚如何解决它。 Here is my code: 这是我的代码:

GLuint shader_load(const GLchar* vertex, const GLchar* fragment) {

std::string ver = file_read_all(vertex);
std::string frag = file_read_all(fragment);

const GLchar* verCode = ver.c_str;
const GLchar* fragCode = frag.c_str;

GLuint program;

GLuint verShader, fragShader;
GLint success;
GLchar log[512];

verShader = glCreateShader(GL_VERTEX_SHADER);
glShaderSource(verShader, 1, &verCode, NULL);
glCompileShader(verShader);
glGetShaderiv(verShader, GL_COMPILE_STATUS, &success);

if (!success) {
    glGetShaderInfoLog(verShader, 512, NULL, log);
    std::cout << "Failed to compile Vertex Shader\n" << log << std::endl;
    return NULL;
}

fragShader = glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(fragShader, 1, &fragCode, NULL);
glCompileShader(fragShader);
glGetShaderiv(fragShader, GL_COMPILE_STATUS, &success);

if (!success) {
    glGetShaderInfoLog(fragShader, 512, NULL, log);
    std::cout << "Failed to compile Fragment Shader\n" << log << std::endl;
    return NULL;
}

program = glCreateProgram();

glAttachShader(program, verShader);
glAttachShader(program, fragShader);

glLinkProgram(program);

glGetProgramiv(program, GL_LINK_STATUS, &success);
if (!success)
{
    glGetProgramInfoLog(program, 512, NULL, log);
    std::cout << "Failed to Link Shader\n" << log << std::endl;
}

glDeleteShader(verShader);
glDeleteShader(fragShader);
}

I'm using Visual Studio Community 2015 on Windows 10 我在Windows 10上使用Visual Studio Community 2015

std::string::c_str is a member function, if you want to call it, you should add () . std::string::c_str是一个成员函数,如果你想调用它,你应该添加()

const GLchar* verCode = ver.c_str();
                                 ~~

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 ostream和运算符std :: basic_string <char, std::char_traits<char> ,std :: allocator <char> &gt;? - ostream and operator std::basic_string<char, std::char_traits<char>, std::allocator<char>>? “ str2Int(std :: basic_string <char, std::char_traits<char> ,std :: allocator <char> &gt; const&)”,引用自: - “str2Int(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)”, referenced from: main.cpp || 未定义对`MyClass :: loadDatas(std :: basic_string的引用 <char, std::char_traits<char> ,std :: allocator <char> &gt;)&#39;| - main.cpp|| undefined reference to `MyClass::loadDatas(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)'| 未定义对`librarymanager :: getBook(std :: basic_string的引用 <char, std::char_traits<char> ,std :: allocator <char> &gt;) - undefined reference to `librarymanager::getBook(std::basic_string<char, std::char_traits<char>, std::allocator<char> >) 1 IntelliSense:没有合适的构造函数可以从“bool”转换为“std :: basic_string” <char, std::char_traits<char> ,std :: allocator <char> &gt;” - 1 IntelliSense: no suitable constructor exists to convert from “bool” to “std::basic_string<char, std::char_traits<char>, std::allocator<char>>” 未定义对`readVector(std :: __ cxx11 :: basic_string的引用) <char, std::char_traits<char> ,std :: allocator <char> &gt;)” - undefined reference to `readVector(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)' 未定义模板 &#39;std::basic_string 的隐式实例化<char, std::char_traits<char> , 标准::分配器<char> &gt;&#39; - Implicit instantiation of undefined template 'std::basic_string<char, std::char_traits<char>, std::allocator<char> >' C++ std::basic_string/char_traits 特化 - C++ std::basic_string/char_traits specialization 从&#39;void&#39;转换为非标量类型&#39;std :: pair <std::basic_string<char, std::char_traits<char> - conversion from ‘void’ to non-scalar type ‘std::pair<std::basic_string<char, std::char_traits<char> 的std ::矢量 <std::basic_string<char> &gt; :: const_iterator&#39;没有名为&#39;c_str&#39;的成员 - std::vector<std::basic_string<char> >::const_iterator’ has no member named ‘c_str’
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM