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

问题描述 投票:-2回答:1

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

我在Linux上使用GNU g ++,据我在OSX上了解,C ++编译器有一个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.

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

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);
}

我想念什么?

c++ linux macos g++ clang
1个回答
0
投票

可能是编译器known issue

© www.soinside.com 2019 - 2024. All rights reserved.