正如标题所说......他们被认为是不同的语言吗?例如,如果您使用C++和Objective-C++的组合编写了一个应用程序,您会认为它是用C++和Objective-C,C++和Objective-C++编写的,还是全部三个?
显然C和C++是不同的语言,即使C++和C直接兼容,Objective-C++和Objective-C的情况如何?
我想知道c ++与objective-c和objective-c ++之间的区别.任何人都可以给我带来差异吗?我们可以使用c ++进行iPhone开发吗?
谢谢,Madan Mohan
我有一个.cpp/.hpp文件组合 - > .hpp文件有#include ..
我也有一个.mm/.h文件组合 - >如果我在.mm目标C++文件中包含.hpp文件,则没有问题.但是,如果我尝试在.h(Objective C标头)文件中包含.hpp文件,我会收到预处理器问题'找不到iostream'.
除了做一些时髦的东西,比如在我的Objective C .h文件中有一个void*然后把它作为包含在.mm中的类型或者包装在Objective C++类型中的每个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) 我想在OS X上的C++项目中调用和使用Objective-C类.现在是时候开始转向所有Objective-C,但我们需要在一段时间内完成这项工作.
如何实现这一目标?任何人都可以解释并提供一个例子吗?
我在以下代码行中收到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) 我尝试在其中创建一个包含类的结构,如:
struct my_struct
{
NSString *string;
// more fields
};
Run Code Online (Sandbox Code Playgroud)
令我惊讶的是,Objective-C++允许启用ARC.
它将如何管理字符串?
它可以很容易地保留在每个任务中,但释放是问题所在.
它可以添加一个带有释放的析构函数,但这会使结构变得非常简单.
它也可以使这不保留或释放,但这样做应该是unsafe_unretained.
根据我的观察,使用它时没有任何事情会崩溃,但我想知道这里到底发生了什么.
我想在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).
以下是示例项目的一些屏幕截图,其中包含我理解的内容以及我不了解的内容:
Bridging-Header-File包含了我想在我的Swift代码中使用的lib方法的原型(我不喜欢这个,但如果它是唯一的方法......).
viewController文件,其中Swift中的代码是,我可以创建一个Superpowered对象,感谢Bridging-Header-File,并调用我放入它的方法.
和wtf我甚至不明白为什么这个Objective-C++文件在这里以及它包含什么.它无处不在,甚至不是他们的lib文件.
因此,考虑到这个示例项目,我创建了自己的项目,这里有一些截图:
同样的Bridging-Header-File在示例项目中除了我包含SuperpoweredIOSAudioIO.h所以我可以使用SuperpoweredIOSAudioIODelegate.
我的viewController文件,其中Swift中的代码是,我可以创建一个Superpowered对象感谢Bridging-Header-File,并调用我放入它的方法.
直到这里,它是伟大的,除了我不能为例子创建一个SuperpoweredRecorder对象.如果我尝试将SuperpoweredRecorder.h文件包含在我的Bridging-Header-File中,我会遇到以下错误:
所以我看到它是因为SuperpoweredRecorder.h包含一些.cpp文件而且我必须为cpp创建一个包装器(有点像我使用桥接头,没有?)但是包括.h和.mm文件我不喜欢我不知道我要把那个.mm文件放进去(代码是SuperpoweredRecorder.cpp什么?但是我无法访问它)
所以,是的,我对所有这些东西有点困惑,你能帮我理解如何在Swift项目中使用所有Superpowered lib吗?
我已经为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吗?知道为什么会这样吗?
我正试图检测图像上的标尺,我将按照下一个过程:
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)