我希望我能解释一下自己。
我有下一个:
档案“A.h”:
#include "C.h"
public class A{
// Some code...
}
文件“B.h”:
#include "A.h"
public class B{
A a = new A(); //With this line I mean I'm using one instance of "A" inside "B.h"
//Some code...
}
是否可以在“A.h”中包含“C.h”?
我的问题是我所包含的代码给了我很多与常规功能的冲突。这不是逐个纠正冲突的选择,因为它们有很多。此外,我的“C.h”代码只是一个测试代码:经过一些测试,我将删除包含行。
有没有办法'冒泡'我的包括?
提前谢谢。
编辑:A.h和B.h在同一名称空间。
答案 0 :(得分:1)
是否可以包括" C.h"只在里面" A.h"?
否。据我所知。
如果您有名称冲突,只需在另一个名称空间中包含C.h,如@ user202729所提议的那样。这可以提供帮助。
但我猜你在A中使用C进行测试,如果没有与C ++ Cli不兼容的实现或来自B.h的内容,你不能在A中使用它。
我们使用了pimpl ideom(指向实现的指针)。 例: c ++ / clr目前不允许直接包含,这就是为什么有时你不能使用你想要使用的库(如C.h),因为它们确实依赖于它的支持。
这是我的C.h(由所有其他标题使用)
struct LockImpl; // forward declaration of C.
class C
{
public:
C();
virtual ~C();
public:
void Lock() const;
void Unlock() const;
LockImpl* _Lock;
};
这是我的C.cpp(没有/ clr编译)
#include <mutex>
struct LockImpl
{
std::mutex mutex;
};
C::C() : _Lock(new LockImpl()) {}
C::~C() { delete _Lock; }
void C::Lock() const
{
_Lock->mutex.lock();
}
void C::Unlock() const
{
_Lock->mutex.unlock();
}
A.H
#include "C.h"
public class A{
C c;
void someMethod()
{
c.Lock() // I used another template for a RAII pattern class.
c.Unlock()
}
}