标签: objective-c++

Objective-C++与Objective-C完全不同吗?

正如标题所说......他们被认为是不同的语言吗?例如,如果您使用C++和Objective-C++的组合编写了一个应用程序,您会认为它是用C++和Objective-C,C++和Objective-C++编写的,还是全部三个?

显然C和C++是不同的语言,即使C++和C直接兼容,Objective-C++和Objective-C的情况如何?

c c++ objective-c objective-c++

13
推荐指数
2
解决办法
1784
查看次数

c ++,objective-c和objective-c ++有什么区别?

我想知道c ++与objective-c和objective-c ++之间的区别.任何人都可以给我带来差异吗?我们可以使用c ++进行iPhone开发吗?

谢谢,Madan Mohan

c++ objective-c objective-c++

12
推荐指数
2
解决办法
2万
查看次数

如何在Objective C++标头中包含C++标头?

我有一个.cpp/.hpp文件组合 - > .hpp文件有#include ..

我也有一个.mm/.h文件组合 - >如果我在.mm目标C++文件中包含.hpp文件,则没有问题.但是,如果我尝试在.h(Objective C标头)文件中包含.hpp文件,我会收到预处理器问题'找不到iostream'.

除了做一些时髦的东西,比如在我的Objective C .h文件中有一个void*然后把它作为包含在.mm中的类型或者包装在Objective C++类型中的每个C++类型之外,还有什么方法吗?

我的问题与托尼的问题基本相同(但没有人回答他):

/sf/ask/711432571/

c++ import include objective-c++ ios

12
推荐指数
1
解决办法
1万
查看次数

在Xcode中创建Objective-C++静态库

所以我开发了一款适用于iPhone的引擎,我想用它制作几款不同的游戏.我没有在每个游戏的项目目录中复制和粘贴引擎文件,而是从每个游戏链接到引擎,所以如果我需要对其进行更改,我只需要这样做一次.在稍微调整一下之后,似乎静态库是在iPhone上执行此操作的最佳方式.

我创建了一个名为Skeleton的新项目,并将所有引擎文件复制到它上面.我使用指南创建了一个静态库,并将该库导入了一个名为Chooser的项目中.但是,当我尝试编译项目时,Xcode开始抱怨我在一个名为ControlScene.mm的文件中包含的一些C++数据结构.这是我的构建错误:

  "operator delete(void*)", referenced from:


      -[ControlScene dealloc] in libSkeleton.a(ControlScene.o)


      -[ControlScene init] in libSkeleton.a(ControlScene.o)


      __gnu_cxx::new_allocator<operation_t>::deallocate(operation_t*, unsigned long)in libSkeleton.a(ControlScene.o)


      __gnu_cxx::new_allocator<operation_t*>::deallocate(operation_t**, unsigned long)in libSkeleton.a(ControlScene.o)


  "operator new(unsigned long)", referenced from:


      -[ControlScene init] in libSkeleton.a(ControlScene.o)


      __gnu_cxx::new_allocator<operation_t*>::allocate(unsigned long, void const*)in libSkeleton.a(ControlScene.o)


      __gnu_cxx::new_allocator<operation_t>::allocate(unsigned long, void const*)in libSkeleton.a(ControlScene.o)


  "std::__throw_bad_alloc()", referenced from:


      __gnu_cxx::new_allocator<operation_t*>::allocate(unsigned long, void const*)in libSkeleton.a(ControlScene.o)


      __gnu_cxx::new_allocator<operation_t>::allocate(unsigned long, void const*)in libSkeleton.a(ControlScene.o)


  "___cxa_rethrow", referenced from:


      std::_Deque_base<operation_t, std::allocator<operation_t> >::_M_create_nodes(operation_t**, operation_t**)in libSkeleton.a(ControlScene.o)


      std::_Deque_base<operation_t, std::allocator<operation_t> >::_M_initialize_map(unsigned long)in libSkeleton.a(ControlScene.o)


  "___cxa_end_catch", referenced from:


      std::_Deque_base<operation_t, std::allocator<operation_t> >::_M_create_nodes(operation_t**, operation_t**)in libSkeleton.a(ControlScene.o)


      std::_Deque_base<operation_t, std::allocator<operation_t> >::_M_initialize_map(unsigned …
Run Code Online (Sandbox Code Playgroud)

iphone xcode objective-c static-libraries objective-c++

11
推荐指数
2
解决办法
1万
查看次数

围绕Objective-C编写C++包装器

我想在OS X上的C++项目中调用和使用Objective-C类.现在是时候开始转向所有Objective-C,但我们需要在一段时间内完成这项工作.

如何实现这一目标?任何人都可以解释并提供一个例子吗?

c++ xcode objective-c wrapper objective-c++

11
推荐指数
3
解决办法
1万
查看次数

NSLog上的EXC_BAD_ACCESS没有字符串格式

我在以下代码行中收到EXC_BAD_ACCESS(或malloc错误):

NSLog(@"Points:");  
Run Code Online (Sandbox Code Playgroud)

这对我来说没有任何意义,因为它应该访问一个字符串常量而不是别的.它通常是一个EXC_BAD_ACCESS,但它偶尔会出现以下错误(在同一行):

Annotate23D(50572,0xac6bb2c0) malloc: *** error for object 0x7051004: incorrect checksum for freed object - object was probably modified after being freed.  
Run Code Online (Sandbox Code Playgroud)

malloc错误的堆栈跟踪(我很难从错误的访问错误中获取完整的错误)是:

#0  0x960e7c97 in malloc_error_break ()
#1  0x960a94ce in szone_error ()
#2  0x960a954e in free_list_checksum_botch ()
#3  0x960afec0 in small_malloc_from_free_list ()
#4  0x960b124c in szone_malloc_should_clear ()
#5  0x960b166b in szone_malloc ()
#6  0x960e7962 in malloc_zone_malloc ()
#7  0x960e8882 in malloc ()
#8  0x020e5837 in uhash_hashUChars ()
#9  0x020e5c01 in uhash_setResizePolicy ()
#10 0x020e5ca5 in uhash_init ()
#11 …
Run Code Online (Sandbox Code Playgroud)

cocoa-touch memory-management objective-c objective-c++

11
推荐指数
2
解决办法
3636
查看次数

使用ARC的结构中的Objective-C类

我尝试在其中创建一个包含类的结构,如:

struct my_struct
{
    NSString *string;
    // more fields
};
Run Code Online (Sandbox Code Playgroud)

令我惊讶的是,Objective-C++允许启用ARC.
它将如何管理字符串?
它可以很容易地保留在每个任务中,但释放是问题所在.
它可以添加一个带有释放的析构函数,但这会使结构变得非常简单.
它也可以使这不保留或释放,但这样做应该是unsafe_unretained.

根据我的观察,使用它时没有任何事情会崩溃,但我想知道这里到底发生了什么.

struct objective-c objective-c++ automatic-ref-counting

11
推荐指数
1
解决办法
3810
查看次数

如何在Swift项目中使用Superpowered lib

我想在Swift中制作一个应用程序,只需通过iPhone的麦克风录制,然后播放录制的声音.

为此,我想使用lib Superpowered这是一个带头文件的静态库.

为此,我尝试拖放项目中的.a和头文件(Xcode为我创建了一个桥接头文件),在Xcode> Target> General中添加了"链接框架和库"中的.a(等等) Xcode>目标>构建阶段>"链接二进制文件库"也可以在Xcode>目标>构建设置>搜索路径>库搜索路径中索引.h文件路径.

但是,我有错误"ld:未找到架构arm64的符号"与此处的XCode完全相同:架构arm64错误的未定义符号,我尝试了我在网上找到的所有解决方案,但仍然没有编译方式.

所以!

Superpowered为我们提供了一个示例应用程序来展示如何混合使用Objective-C++并在Swift项目中使用它们的lib(如果你想要https://github.com/superpoweredSDK/Low-Latency-Android-Audio-,这里有一个指向git的链接iOS-Audio-Engine).

以下是示例项目的一些屏幕截图,其中包含我理解的内容以及我不了解的内容:

桥接头文件Superpowered

Bridging-Header-File包含了我想在我的Swift代码中使用的lib方法的原型(我不喜欢这个,但如果它是唯一的方法......).

ViewController文件

viewController文件,其中Swift中的代码是,我可以创建一个Superpowered对象,感谢Bridging-Header-File,并调用我放入它的方法.

.mm文件

和wtf我甚至不明白为什么这个Objective-C++文件在这里以及它包含什么.它无处不在,甚至不是他们的lib文件.

因此,考虑到这个示例项目,我创建了自己的项目,这里有一些截图:

Briging报头 - 文件

同样的Bridging-Header-File在示例项目中除了我包含SuperpoweredIOSAudioIO.h所以我可以使用SuperpoweredIOSAudioIODelegate.

的viewController

我的viewController文件,其中Swift中的代码是,我可以创建一个Superpowered对象感谢Bridging-Header-File,并调用我放入它的方法.

直到这里,它是伟大的,除了我不能为例子创建一个SuperpoweredRecorder对象.如果我尝试将SuperpoweredRecorder.h文件包含在我的Bridging-Header-File中,我会遇到以下错误:

错误

所以我看到它是因为SuperpoweredRecorder.h包含一些.cpp文件而且我必须为cpp创建一个包装器(有点像我使用桥接头,没有?)但是包括.h和.mm文件我不喜欢我不知道我要把那个.mm文件放进去(代码是SuperpoweredRecorder.cpp什么?但是我无法访问它)

所以,是的,我对所有这些东西有点困惑,你能帮我理解如何在Swift项目中使用所有Superpowered lib吗?

c++ objective-c++ ios swift

11
推荐指数
1
解决办法
1916
查看次数

适用于iOS的Podofo; 编写PDF文件后"找不到目录对象"

我已经为iOS构建了Podofo 0.9.3以及支持amrv7,arm64和模拟器的所有其他所需的库.我的项目运行正常,但我的问题是第二次加载文档.我总是在Podofo中收到错误"找不到目录对象".如果我使用Mac上的预览应用程序打开文档并保存,Podofo可以再次打开它.

这是我用来打开文档并保存它的代码:

self.doc = new PoDoFo::PdfMemDocument([path UTF8String]);

NSString *tmpPath = [self createCopyForFile:self.pdfPath];

self.doc->Write([tmpPath UTF8String]);

NSData *myFile = [NSData dataWithContentsOfFile:tmpPath];
[myFile writeToFile:tmpPath atomically:YES];

NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *error;

if ([fileManager fileExistsAtPath:self.pdfPath] == YES) {
     [fileManager removeItemAtPath:self.pdfPath error:&error];
}
[fileManager copyItemAtPath:tmpPath toPath:self.pdfPath error:&error];
Run Code Online (Sandbox Code Playgroud)

错误在这里:

void PdfMemDocument::InitFromParser( PdfParser* pParser )
{
...
PdfObject* pCatalog = pTrailer->GetIndirectKey( "Root" );
if( !pCatalog )
{
      PODOFO_RAISE_ERROR_INFO( ePdfError_NoObject, "Catalog object not found!" );
...
}
Run Code Online (Sandbox Code Playgroud)

你们最近为iOS构建了Podofo吗?知道为什么会这样吗?

pdf objective-c objective-c++ ios

10
推荐指数
1
解决办法
274
查看次数

OpenCV线/标尺检测

我正试图检测图像上的标尺,我将按照下一个过程:

1)准备图像(模糊,Canny等)

2)检测线条

3)准备一组平行线

所以,我有一个图像: 在此输入图像描述

该应用程序转换为: 在此输入图像描述

接下来我尝试了HoughLinesP方法,看起来我不能在我的情况下应用它,因为我不知道线的角度,所以找不到标尺垂直线,但发现水平(例如)和每个标尺线由很多细线,这将是一个需要处理的问题: 在此输入图像描述

代码:

std::vector<cv::Vec4i> lines_std;
cv::HoughLinesP( grayMat, lines_std, 1, CV_PI/90,  50, 10, 0 );

// drawing lines (with random color)
for( size_t i = 0; i < lines_std.size(); i++ )
{
    cv::line( originalMat, cv::Point(lines_std[i][0], lines_std[i][1]),
             cv::Point(lines_std[i][2], lines_std[i][3]), cv::Scalar(arc4random_uniform(155)+100,
                                                             arc4random_uniform(155)+100,
                                                             arc4random_uniform(155)+100), 1);
}
Run Code Online (Sandbox Code Playgroud)

我也尝试了LineSegmentDetector,并且得到了更接近我期望的结果: 在此输入图像描述

码:

vector<Vec4f> lines_std;
Ptr<LineSegmentDetector> ls = createLineSegmentDetector(LSD_REFINE_NONE);
ls->detect(grayMat, lines_std);
Run Code Online (Sandbox Code Playgroud)

但在这里我遇到了一些问题(并且看起来无法自定义createLineSegmentDetector):并非所有线路都被检测到;线路检测不在中心但在侧面检测,有时仅在左侧或右侧,但我需要获得中心粗线,因为这将在下一个计算中使用.

那么,找到所有线条的正确方法是什么(每条线只有一次在粗线的中心)?

更新

尝试过HoughLines:

矢量线;

cv::HoughLines(grayMat, lines, 1, CV_PI/90, 100 , 100, 0 …
Run Code Online (Sandbox Code Playgroud)

opencv objective-c++ ios opencv3.0 opencv3.1

10
推荐指数
1
解决办法
1018
查看次数