C++ C++;pimpl习惯用法和静态方法与字段
我想更好地理解如何在PIMPL习惯用法中使用静态字段作为方法。 考虑下面的代码。 MyClass.h文件: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
#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放在.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
的指针,而不是TypeType
。@dialuticus:是另一个错误。它是我实际实现中的一个指针字段
,静态字段
必须是指向类型
的指针,而不是类型类型
。@dialogicus:是另一个错误。这是我实际实现中的一个指针