Namespaces and includes generate link error

后端 未结 3 1807
忘了有多久
忘了有多久 2021-01-24 04:47

I was playing around with namespaces when I encountered a lnk2005 error. I can\'t figure out how to get around the error. Here\'s the error:

1>Source.obj :          


        
3条回答
  •  北海茫月
    2021-01-24 05:47

    I've had the exact same problem and I found a workarroud.

    chart.h becomes:

    #pragma once
    
    #include "foo.h"
    
    class Chart{
        static int t;
        static foo l;
        class Bars
        {
            static int d;
        };
    };
    

    and define the variables in chart.cpp

    int Chart::t;
    foo Chart::l;
    int Chart::Bars::d;
    

    Ugly, I know, but at least the syntax is the same wherever you need to use the vars.

    This way only ONE .obj file is created containing the variables which prevents the multiple definition erros.
    I haven't tried if you can declare a static variable on a namespace which could solve the problem.

    Edit:

    P.S. this solution gives some weird errors on msvc, as if every time it is included, sections of the code reference differente variables

    Tested on my own program the static-inside-namespace and it seems to work.
    Example.h:

    namespace sdl{
        static SDL_Surface* screen;
    
        static int xres = 640;
        static int yres = 480;
        static int bpp  = 32;
        static int flags = SDL_ASYNCBLIT;
    
    };
    

提交回复
热议问题