c++ - Clang编译器为什么会生成错误“在'〜'之后的类名是用来命名析构函数的”?

标签 c++ linux macos g++ clang

我有一个正在开发的简单图形应用程序,想要跨平台运行。现在,我有一个简单的make文件,可以在Ubuntu Linux和OSX上正常编译。

我在Linux上使用GNU g ++,据我在OSX上了解,Clang编译器有g ++的别名-因此,这就是在OSX上运行make时所调用的名称。 Clang声称它是compatible with g++,直到今天我还没有关于兼容性的任何问题。但是,昨天我在Linux机器上工作时添加了带有析构函数的类,当我尝试在OSX机器上编译相同的代码时,收到以下错误:

make osx
g++ -o build/open_gl_demo *.cpp -framework OpenGL -lGLEW -lglfw -lSOIL
In file included from main.cpp:4:
./shader_program.hpp:18:6: error: expected the class name after '~' to name a destructor
    ~ShaderProgram(); 
     ^~~~~~~~~~~~~
     ShaderProgram
1 error generated.
In file included from shader_program.cpp:1:
./shader_program.hpp:18:6: error: expected the class name after '~' to name a destructor
    ~ShaderProgram(); 
     ^~~~~~~~~~~~~
     ShaderProgram
shader_program.cpp:46:17: error: expected the class name after '~' to name a destructor
ShaderProgram::~ShaderProgram() {
                ^~~~~~~~~~~~~
                ShaderProgram
2 errors generated.


我看不出为什么在OSX上使用g ++在Linux上可以正常编译的有效声明的构造函数失败的原因。以下是相关代码:

shader_program.hpp:

class ShaderProgram {
  public:
    [...other public methods and variable signatures...]

    ~ShaderProgram(); 
};

#endif 


shader_program.cpp:

#include "shader_program.hpp"

[...other method definitions...]

ShaderProgram::~ShaderProgram() {
  glDeleteProgram(ShaderProgram);
  glDeleteShader(FragmentShader);
  glDeleteShader(VertexShader);
}


我想念什么?

最佳答案

可能是编译器known issue

关于c++ - Clang编译器为什么会生成错误“在'〜'之后的类名是用来命名析构函数的”?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60040791/

相关文章:

objective-c - 在 Xcode5 中链接依赖于 'Build' 或 'Debug' 模式的框架?

ios - 隐式属性动画不适用于CAReplicatorLayer吗?

c++ - main函数返回不会返回高位整数

C++ 字符串中的回车和换行

c++ - 指向动态内存结构中的变量的问题

linux - 如何使用 ffmpeg 重叠和合并多个音频文件?

c++ - 为什么分配更大的空间时,堆地址的增长方向会相反?

java - 安装 RPM 会导致任何问题吗?

linux - debian redis update-rc.d 错误 - redis 和 nginx 之间存在循环

xcode - 在 Mac 上安装 xgboost - ld : library not found