Почему компилятор Clang генерирует ошибку "ожидал, что имя класса после '~' назовет деструктор"? - PullRequest
0 голосов
/ 03 февраля 2020

У меня есть простое графическое приложение, которое я разрабатываю и хочу запустить кроссплатформенно. Прямо сейчас у меня есть простой make-файл, который прекрасно компилируется как на Ubuntu Linux, так и на OSX.

Я использую GNU g ++ на Linux, и, как я понимаю, на OSX есть псевдоним для g ++ для компилятор Clang - вот что он вызывал при запуске make на OSX. Clang утверждает, что он совместим с 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.

I не вижу причин, почему правильно объявленный конструктор , который прекрасно компилируется с g ++ в Linux, не работает в 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);
}

Чего мне не хватает?

1 Ответ

0 голосов
/ 03 февраля 2020

Вероятно, компилятор известная проблема

...