我试图扩展预先存在的类,并希望为其添加新功能。 我创建了一个新类来执行新的扩展功能,但由于此功能对于预先存在的类来说太具体了,我将类实现移动到预先存在的类的.cpp文件中的未命名命名空间。(它在未命名的命名空间中)因为它实际上并不属于预先存在的类所保留的命名空间。 每个现有的类仍然应该存储这个新类的指针。 我做了这样的实现:
我在命名空间中有预先存在的类说(xyz): 我的.h看起来像这样:
// Forward declare the class
namespace
{
// This is the class in which I have kept my extended functionality
class MyClass;
}
namespace xyz
{
class Subject
{
public:
Subject();
private:
//keeping the pointer in Pr-Existing class
std::unique_ptr< MyClass > mMyClass
};
}
在.cpp中我在一个未命名的命名空间中定义了MyClass。
所以我的.cpp看起来像这样:
namespace
{
class MyClass
{
.
.
.
};
}
xyz::Subject::Subject()
{
mMyClass.reset( new MyClass() );
}
现在我无法编译程序,编译器认为在两个地方声明的MyClass是不同的。 我收到这样的错误:
错误:对'MyClass'的引用含糊不清 mMyClass.reset(new MyClass)); ^ .h:注意:通过名称查找找到的候选人是'MyClass' class MyClass; ^ .cpp:注意:通过名称查找找到的候选人是':: MyClass' class MyClass:public MyClass
我可以通过将MyClass保留在命名空间xyz中来解决它。 但是如果没有它,有没有办法呢?
答案 0 :(得分:0)
感谢您的回复。
似乎我试图实现它并不是一个好的设计实践。 我在.h中声明未命名命名空间中的类是个坏主意。 它将可用于我将包含此标头的所有文件。 简而言之,它与我想要的相反(保持这个类私有) 现在我将使用pImpl成语而不是这个。