.NET C++/CLI – C3145, global or static variable may not have managed type

If you are trying to use a cheeky file static or global variable while eagerly developing your C++/CLI software you will probably encounter the following error:


“C3145, global or static variable may not have managed type”


At this point you remember that this isn’t really C++ but a crazy non-standard extension to C++! So instead of declaring a file static scope variable like this:

static Acquisition::IImage^ simage = nullptr;

So as a fix, you can declare a container class and add it as a static member, thus:

ref class ImageContainer {
        static Acquisition::IImage^ Image = nullptr;

And then access it in this way:

ImageContainer::Image = image;

Thus solution worked well for us, but of course we will be getting rid of this global variable in due time! ;)