命名空间C+的转发声明+;课程目标C 是否可以在目标空间内,在目标C文件头中,对C++类进行正向声明?< /P>
要在目标C中向前声明的C++类:命名空间C+的转发声明+;课程目标C 是否可以在目标空间内,在目标C文件头中,对C++类进行正向声明?< /P>,c++,objective-c,class,namespaces,forward-declaration,C++,Objective C,Class,Namespaces,Forward Declaration,要在目标C中向前声明的C++类: namespace name { class Clazz { }; } 我知道如果C++类不在命名空间中,我可以。取自 有什么想法吗 谢谢大家 >至少在正常的C++中,你会做一些类似的事情: namespace a { class b; } int main(){ a::b *c; } 但是,我不能说Objective C编译器是否会接受这一点。您可以在如下名称空间中声明一个转发类: 名称空间MyNamespace
namespace name
{
class Clazz
{
};
}
我知道如果C++类不在命名空间中,我可以。取自
有什么想法吗谢谢大家 >至少在正常的C++中,你会做一些类似的事情:
namespace a {
class b;
}
int main(){
a::b *c;
}
但是,我不能说Objective C编译器是否会接受这一点。您可以在如下名称空间中声明一个转发类:
名称空间MyNamespace
{
类MyClass;
};代码>
它应该可以在Obj-C++中工作,但如果不能,您也可以尝试Obj-C的@class
,或者只执行typedef void*Clazz您可以在objective-C++头中将类作为结构向前声明,然后将它们包含在C或Obj-C代码中。通常适用的相同限制也适用于这种情况。唯一需要注意的是,您必须在名称空间周围放置ifdef,以便在将头包含在C代码中时不会显示它们,因为C编译器不知道名称空间
#ifdef __cplusplus
namespace name{
#endif
struct classname;
#ifdef __cplusplus
}
using namespace name;
#endif
您只需像往常一样声明它,并将其封装在C++ <代码>中,当标题包含在C和/或Objc翻译中时,检查:
#ifdef __cplusplus
namespace name {
class Clazz;
} // << name
#endif
\ifdef\uuucplusplus
名称空间名称{
课堂讨论;
} /向前声明C++类有什么用?在这种情况下,只需使用#typedef void Clazz
。objective-c是c的纯超集,因此它不会识别名称空间
标识符。我不知道u cplusplus定义。现在一切都清楚了。谢谢。你的回答也很有用。谢谢你的回答也很有用。谢谢