glbinding示例编译错误:无法输出OpenGL版本的问题求助
glbinding编译错误:std::ostream无法输出glbinding::Version类型
我基于glbinding的cubescape示例写了一个简化的OpenGL基础示例,但编译失败。示例代码如下:
#include <iostream> #include <GLFW/glfw3.h> #include <glbinding/glbinding.h> #include <glbinding-aux/ContextInfo.h> using std::cout; using std::endl; int main() { if (glfwInit()) { // ------ 创建窗口 auto const windowPtr = glfwCreateWindow(640, 480, "tc0001", nullptr, nullptr); if (windowPtr) { glfwHideWindow(windowPtr); glfwMakeContextCurrent(windowPtr); glbinding::initialize(glfwGetProcAddress, false); cout << "OpenGL Version: " << glbinding::aux::ContextInfo::version() << endl; cout << "OpenGL Vendor: " << glbinding::aux::ContextInfo::vendor() << endl; cout << "OpenGL Renderer: " << glbinding::aux::ContextInfo::renderer() << endl; // ------ 销毁窗口 glfwDestroyWindow(windowPtr); } else { cout << "glfwCreateWindow error" << endl; } glfwTerminate(); } else { cout << "glfwInit error" << endl; } }
编译报错出在这一行:
cout << "OpenGL Version: " << glbinding::aux::ContextInfo::version() << endl;
编译器错误信息:
error: no match for ‘operator<<’ (operand types are ‘std::basic_ostream<char>’ and ‘glbinding::Version’)
环境信息:
- 系统:Ubuntu 22.04.3 LTS
- 编译器:g++ (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0
- glbinding版本:3.3.0
问题原因与解决方案
问题核心:glbinding::aux::ContextInfo::version()返回的是glbinding::Version类型对象,而标准库std::ostream没有默认提供该类型的输出重载。
有两种解决方式:
方法1:调用Version类的toString()方法
glbinding::Version类自带toString()成员函数,可直接将版本信息转为字符串输出:
cout << "OpenGL Version: " << glbinding::aux::ContextInfo::version().toString() << endl;
方法2:手动实现operator<<重载
如果需要多次输出Version对象,可自定义输出流重载函数,放在main函数之前:
#include <glbinding/Version.h> std::ostream& operator<<(std::ostream& os, const glbinding::Version& version) { return os << version.toString(); }
之后就可以直接用cout << version的方式输出该类型对象。
内容的提问来源于stack exchange,提问作者HEKTO
相关产品推荐
相关产品推荐

