C++ C++;pimpl习惯用法和静态方法与字段

C++ C++;pimpl习惯用法和静态方法与字段,c++,static,static-methods,pimpl-idiom,C++,Static,Static Methods,Pimpl Idiom,我想更好地理解如何在PIMPL习惯用法中使用静态字段作为方法。 考虑下面的代码。 MyClass.h文件: #ifndef MYCLASS #define MYCLASS class MyClass{ public: void method(); static void static_method(); private: Type field; static Type *static_field; } #endif MyClas

我想更好地理解如何在PIMPL习惯用法中使用静态字段作为方法。 考虑下面的代码。

MyClass.h文件:

#ifndef MYCLASS
#define MYCLASS

class MyClass{
     public:
     void method();
     static void static_method();

     private:
     Type field;
     static Type *static_field;
}

#endif
MyClass.cpp文件:

#include MyClass.h

void MyClass::method(){
     /*OK method definition*/
     field = new Type();   /*OK field construction*/
}

void MyClass::static_method(){
     /*NOT WORKING method declaraion */
     static_field = new Type();   /*not working */
}
我有以下两个错误:

  • 无法将成员函数static\u方法声明为具有静态链接
  • 此范围中未声明静态_字段
  • 我不太熟悉pimpl这个成语

    所以我的问题是如何实现静态方法和字段声明,以尊重PIMPL习惯用法并成功编译它

    我在这个代码中做错了什么

    如何更改代码?

    • 向我们展示您验证过的实际代码,这些代码会产生相同的错误
    • 不要将static放在.cpp文件中函数定义的前面
    • 您没有一个
      静态\u字段
      -您有两个
      字段
        • 向我们展示您验证过的实际代码,这些代码会产生相同的错误
        • 不要将static放在.cpp文件中函数定义的前面
        • 您没有一个
          静态\u字段
          -您有两个
          字段

          • pimpl的目的是消除编译依赖性。pimpl类具有私有静态成员这一事实是一个实现细节,因此不应出现在头文件或pimpl类定义中


            将私有静态数据与pimpl类的成员函数的定义一起放入未命名命名空间中的.cc/.cpp文件中。

            如果pimpl是为了消除编译依赖项,则其目的是。pimpl类具有私有静态成员这一事实是一个实现细节,因此不应出现在头文件或pimpl类定义中


            将私有静态数据与pimpl类的成员函数的定义一起放入未命名命名空间中的.cc/.cpp文件。

            实际上,您需要有定义

            Type* MyClass::static_field = new Type();
            

            在u'r cpp文件中。这是因为这样你就可以告诉编译器该字段应该在哪个对象文件中实例化,否则编译器就无法知道。

            事实上,你需要有定义

            Type* MyClass::static_field = new Type();
            

            在u'r cpp文件中。这是因为这样你就可以告诉编译器该字段应该在哪个对象文件中实例化,否则编译器就无法知道。

            对不起,我来自java语言,那里有一个静态变量。我如何声明C++中的静态变量?埃里克所说的是,在代码中有“代码>静态类型字段< /C>”,在这里,你显然意味着“代码>静态类型StasyPixField。@ 0VBeOSE,埃里克给出了正确的答案。查看此链接(由谷歌提供):对不起,我来自java语言,其中存在一个静态变量。我如何声明C++中的静态变量?埃里克所说的是,在代码中有“代码>静态类型字段< /C>”,在这里,你显然意味着“代码>静态类型StasyPixField。@ 0VBeOSE,埃里克给出了正确的答案。查看此链接(由谷歌提供):
            field
            static\u field
            必须是指向
            Type
            的指针,而不是Type
            Type
            。@dialuticus:是另一个错误。它是我实际实现中的一个指针
            字段
            静态字段
            必须是指向
            类型
            的指针,而不是类型
            类型
            。@dialogicus:是另一个错误。这是我实际实现中的一个指针