Ошибка структурного прямого объявления: переопределение Typedef с различными типами

Я хочу переслать объявление структуры в заголовочном файле.

struct GLFWvidmode;

class DesktopVideoMode {
private:
    const GLFWvidmode *videomode;
public:
    DesktopVideoMode(const GLFWvidmode *videomode);
...

В файл cpp я включаю внешний заголовок с определением...

#include "DesktopVideoMode.hpp"
#include <GLFW/glfw3.h>

... где возникает ошибка "Переопределение Typedef с различными типами ('struct GLFWvidmode' vs 'GLFWvidmode')":

typedef struct
{
    /*! The width, in screen coordinates, of the video mode.
     */
    int width;
    /*! The height, in screen coordinates, of the video mode.
     */
    int height;
    /*! The bit depth of the red channel of the video mode.
     */
    int redBits;
    /*! The bit depth of the green channel of the video mode.
     */
    int greenBits;
    /*! The bit depth of the blue channel of the video mode.
     */
    int blueBits;
    /*! The refresh rate, in Hz, of the video mode.
     */
    int refreshRate;
} GLFWvidmode;

Разве я не могу отправить объявление в таком случае?

2 ответа

Решение

GLFWvidmode это не структура, это typedef. Вы не можете форвард-декларировать typedef. Кто бы ни решил использовать неназванную структуру, принял плохое дизайнерское решение.

Я хотел бы отметить, что GLFWvidmode является именем typedef для анонимной структуры. Если вы намеренно хотите переслать объявление структуры, вы всегда должны добавлять тег имени в структуру, объявляя структуру следующим образом:

    typedef struct tagname1{
    some members...;
    }tagname2;

примечание дата tagname1 а также tagname2 может быть таким же (вы можете использовать tagname1 или же tagname или же GLFWvidmode в обоих местах).. и теперь, поскольку структура теперь имеет тэг (он больше не анонимный), вы можете ссылаться на него для прямого объявления.

и да, анонимная структура не может быть использована для прямого объявления, так как нет тега, на который можно сослаться..:) надеюсь, это поможет.

Другие вопросы по тегам