我正在尝试为OpenGL应用程序设置一些日志记录功能。 GLFW提供了注册回调函数的选项,该函数在发生错误时被调用,但由于它是C库,因此它要求函数以C风格编写,即在类之外。因此,我将日志记录功能放入文件log.h
中定义的命名空间。
#ifndef LOG_H
#define LOG_H
#include <fstream>
namespace gllog{
#define GL_LOG_FILE "gl.log"
bool restart_gl_log(){
//...
}
bool gl_log (const char* message, const char* filename, int line){
//...
}
void glfw_error_callback (int error, const char* description){
//...
}
};
#endif
即使我添加了包含警卫,每当我从两个不同的文件中包含此文件时,我都会收到如下错误:
CMakeFiles/gl4tuts.dir/extended_initialisation/ExtendedInitialisation.cpp.o: In function `gllog::glfw_error_callback(int, char const*)':
ExtendedInitialisation.cpp:(.text+0x340): multiple definition of `gllog::glfw_error_callback(int, char const*)'
CMakeFiles/gl4tuts.dir/hello_triangle/HelloTriangle.cpp.o:HelloTriangle.cpp:(.text+0xa10): first defined here
我正在使用CMake构建。
可能是什么原因?班级缺席是否可以相关?
答案 0 :(得分:1)
在编译相同的.cpp
文件时,包含保护可以防止您多次包含相同的头文件。它们不会阻止您在编译不同的.cpp
文件时多次包含相同的头文件 - 实际上它们通常用于在不同的编译单元中使相同的类可用。
顺便说一下,编译器没有抱怨链接器。