C++ - What does "Incomplete type not allowed" error mean, and how can I fix it?

tobahhh picture tobahhh · Mar 19, 2018 · Viewed 7k times · Source

Although I've seen many questions referring to the "Incomplete type not allowed" error in C++, I still cannot figure out what the compiler is trying to tell me when it screams at me like this. I've been able to piece together that it has something to do with #include-ing header files, but I am clueless as to what an "incomplete type" is and why it is "not allowed". I got the error when trying to inherit from SDL_Window as such:

#pragma once
#include "SDL.h"

class Window : public SDL_Window
{
public:
  Window();
  ~Window();
};

Could someone please explain to me what the error means, how to (generally) fix it, and, in my case, what I should do to stop it from happening?

Answer

eerorika picture eerorika · Mar 19, 2018

C++ - What does “Incomplete type not allowed” error mean

Incomplete type means that there is no definition for the type SDL_Window.

The error means that the type is incomplete, and that an incomplete type wasn't allowed in that context. In this particular case: an incomplete type cannot be used as a base class.

what I should do to stop it from happening?

Do not attempt to use SDL_Window as a base class - it is not intended to be used in that way.

SDL_Window is intended to be used as an opaque pointer. Some SDL functions may return you a SDL_Window*. You can store it, and send it as an argument to other SDL functions. That is all it is used for.