gpt4 book ai didi

c++ - 混合使用 C++ 和 Objective-C (Cocoa) 导致段错误

转载 作者:行者123 更新时间:2023-11-30 01:57:15 28 4
gpt4 key购买 nike

我正在努力学习 Objective-C,并阅读了一些关于将 Objective-C 类包装到 C++ 中的教程。我到了以下几点,所有内容都可以编译而没有任何错误,但是当我运行程序时它会导致“段错误”。

好吧,假设我有以下代码片段,我使用它们进行编译:g++ -Wall -pedantic -framework Cocoa -x objective-c++ -o test test.mm。我哪里错了?

测试.mm

#include <iostream>
#import "test-osx.m"

struct OpenControllerImpl
{
OpenController* wrapped;
};

class Panel {
OpenControllerImpl* impl;

public:
Panel() :
impl(new OpenControllerImpl) {
impl->wrapped = [[OpenController alloc] init];
}
~Panel() {
[(OpenController*)impl release];
}
void open() {
[(OpenController*)impl doOpen:impl->wrapped];
}
};

int main() {
Panel* openPanel = new Panel();
openPanel->open();
return 0;
}

test-osx.h

#import <Cocoa/Cocoa.h>

@interface OpenController : NSObject {

}

- (void)doOpen:(id)sender;

@end

test-osx.m

#import "test-osx.h"
#include <stdio.h>

@implementation OpenController

- (void)doOpen:(id)sender {
printf("here");
}

@end

最佳答案

[(OpenController*)impl doOpen:impl->wrapped];

您正在将包含 Objective-C 对象的结构转换为对象类型。你必须使用

[impl->wrapped doOpen:…]

你不需要转换,因为 impl->wrapped 已经是指向 OpenController 对象类型的指针。

关于c++ - 混合使用 C++ 和 Objective-C (Cocoa) 导致段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18949413/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com