代码之家  ›  专栏  ›  技术社区  ›  MBZ

静态数据成员的C++定义

  •  18
  • MBZ  · 技术社区  · 14 年前

    //.h file
    class __declspec(dllimport) MyClass
    {
        public:
        //stuff
        private:
    
        static int myInt;
    };
    
    // .cpp file
    int MyClass::myInt = 0;
    

    error C2491: 'MyClass::myInt' : definition of dllimport static data member not allowed
    

    我该怎么办?

    3 回复  |  直到 14 年前
        1
  •  34
  •   jaques-sam    5 年前

    __declspec(dllimport) 使用 实现类的DLL。因此,成员函数和静态数据成员是在DLL中定义的,在程序中再次定义它们是错误的。

    __declspec(dllexport) 相反。

    BUILDING_MYDLL MyClass 然后你就有了:

        #ifdef _MSC_VER
        #  ifdef BUILDING_MYDLL
        #    define MYCLASS_DECLSPEC __declspec(dllexport)
        #  else
        #    define MYCLASS_DECLSPEC __declspec(dllimport)
        #  endif
        #endif
    
        class MYCLASS_DECLSPEC MyClass
        {
            ...
        };
    

    这意味着您可以在DLL和使用该DLL的应用程序之间共享头文件。

        2
  •  6
  •   liaK    14 年前

    MSDN Documentation ,

    当您声明类dllimport时, 所有成员函数和静态 导入数据成员。不像 dllimport和dllexport在上的行为 非类类型, 静态数据成员 无法在中指定定义 在同一个程序中,dllimport 类已定义 .

    希望有帮助。。

        3
  •  0
  •   user396672    14 年前

    如果您要导入一个类,那么您就要将它与所有的it成员一起导入,因此不可能在“客户端”上定义任何类成员。dllexport关键字应代表实现dll使用