Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
命名空间C+的转发声明+;课程目标C 是否可以在目标空间内,在目标C文件头中,对C++类进行正向声明?< /P>_C++_Objective C_Class_Namespaces_Forward Declaration - Fatal编程技术网

命名空间C+的转发声明+;课程目标C 是否可以在目标空间内,在目标C文件头中,对C++类进行正向声明?< /P>

命名空间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

要在目标C中向前声明的C++类:

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定义。现在一切都清楚了。谢谢。你的回答也很有用。谢谢你的回答也很有用。谢谢