Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.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++_Objective C_Types_Mixed Code - Fatal编程技术网

C++ 如何将分派队列分配给结构中的变量

C++ 如何将分派队列分配给结构中的变量,c++,objective-c,types,mixed-code,C++,Objective C,Types,Mixed Code,我对Objective C还比较陌生,很容易被各种类型的代码搞糊涂。我正在使用SquareCam示例项目中的代码,并将其合并到一个更大的项目中。它工作正常,但现在我想保存videoDataOutputQueue,它是dispatch\u queue\t类型,以便我可以在项目中的其他地方使用它。它必须在最后返回到目标C代码之前通过一些C++代码。因此,我试图将其添加到我已经拥有的结构中,作为void*(void*videoDataOutputQueue;) 但是,我还没有找到正确的方法来分配它,而

我对Objective C还比较陌生,很容易被各种类型的代码搞糊涂。我正在使用SquareCam示例项目中的代码,并将其合并到一个更大的项目中。它工作正常,但现在我想保存videoDataOutputQueue,它是dispatch\u queue\t类型,以便我可以在项目中的其他地方使用它。它必须在最后返回到目标C代码之前通过一些C++代码。因此,我试图将其添加到我已经拥有的结构中,作为void*(void*videoDataOutputQueue;)

但是,我还没有找到正确的方法来分配它,而不会出现EXC_BAD_ACCESS运行时错误。因为Debug是一个C++对象,我不能只使用它的地址?
   declared in the interface for squarecamviewcontroller:
   @interface SquareCamViewController : UIViewController <UIGestureRecognizerDelegate, AVCaptureVideoDataOutputSampleBufferDelegate,UIActionSheetDelegate>
{
   AVCaptureVideoPreviewLayer *previewLayer;
   AVCaptureVideoDataOutput *dataOutput;
   AVCaptureVideoDataOutput *videoDataOutput;
   dispatch_queue_t videoDataOutputQueue;
   <other stuff>
}
squarecamviewcontroller接口中声明的
:
@接口SquareCamViewController:UIViewController
{
AVCaptureVideoPreviewLayer*预览层;
AVCaptureVideoDataOutput*数据输出;
AVCaptureVideoDataOutput*视频数据输出;
调度队列\u t视频数据输出队列;
}
代码后面部分:

- (void)setupAVCapture
{
   <other stuff from the sample code>
    MYSTRUCT  myStruct = (MYSTRUCT)struct;  // make a pointer to the structure
    myStruct->videoDataOutputQueue = (void *)videoDataOutputQueue;  <<<- bad access here at runtime

 <other stuff>
}
-(无效)设置捕获
{
MYSTRUCT MYSTRUCT=(MYSTRUCT)struct;//创建指向该结构的指针

myStruct->videoDataOutputQueue=(void*)videoDataOutputQueue;您的问题变得不必要地难以理解,因为“代码”您已经演示了语法错误。它显然不是您的真实代码,因此我们无法猜测实际发生的情况。例如,您使用
struct
保留关键字,就好像它是一个值一样

考虑到发生错误访问的位置,这与调度队列无关。看起来您的
myStruct
变量应该是指向某种结构的指针,但只是一个垃圾指针。因此,尝试将值分配给它的某个字段最终会写入无效的内存地址。实际上,它并不是不管这个领域的性质是什么

问题显然恰恰出现在您省略为“”的代码中。因此,您需要显示它。实际上,您需要显示真实的代码

除此之外,
dispatch\u queue\t
是一种C类型。它不特定于Objective-C。因此,您可以跨所有基于C的语言使用它。无需使用
void*


与所有分派对象一样,分派队列也是按引用计数的。如果要保留对它的长期引用,则需要确保它保持活动状态。因此,需要使用
dispatch\u retain()
来保留它。同样,在使用
dispatch\u release()
完成后,需要释放它。(用另一个引用替换保留的引用时,不要忘记释放旧值。)

我很抱歉,我匆忙地提出了这个问题,并把代码搞砸了,没有显示我把对象放在哪里以备将来参考和其他错误。无论如何,我感谢你的帮助。我没有意识到这是一个C类型,这很有帮助。我明天会清理这个问题,然后再试一次。如果dispatch\u queue\u不是C类型,那么我应该是能够将它添加到我的结构中,一切都应该很好。但是当我尝试这样做时,在我的.h文件中,我得到了“未知类型名称”dispatch\u queue\t。如果我创建了该类型的独立变量,那么它就可以了。typedef struct{bool debug_映像;bool debug_段;等等……调度队列\u t videoqueue;您忽略了包含必要的头:
\35; include
。谢谢。这使我完成了编译。不久将测试运行时。