我正在尝试为用C ++编写的OS X应用程序创建一个窗口(目前使用的是Xcode 6.4)。在阅读StackOverflow和其他地方关于Objective-C ++,PIMPL以及为Objective-C类和对象创建适当的C ++接口/包装之后,我想出了以下内容:
main.cpp中:
#include "WindowController.h"
int main(int argc, const char * argv[]) {
WindowController *windowController = new WindowController();
return 0;
}
WindowController.h:
#ifndef _WindowController_h
#define _WindowController_h
class WindowController
{
public:
WindowController();
~WindowController();
void init();
void createWindow(int width, int height);
void destroyWindow();
};
#endif
WindowController-objc.h:
#ifndef _WindowController_objc_h
#define _WindowController_objc_h
@interface WindowControllerObjC : NSObject
- (void) WindowController::createWindowWithWidth: (int) width
AndHeight: (int) height;
@end
#endif
WindowController.mm:
#import "WindowController.h"
#import "WindowController-objc.h"
@implementation WindowControllerObjC
AppView view;
WindowController::WindowController() {}
WindowController::~WindowController() {
[(id)self dealloc];
}
void WindowController::init(void) {
self = [[RTRTWindowController alloc] init];
}
void WindowController::createWindow(int width, int height) {
(id)self createWindowWithWidth: width AndHeight: height];
}
void WindowController::destroyWindow(void) {
// remove window
}
- (void) createWindowWithWidth: (int) width AndHeight: (int) height {
// create window and initialize view
}
我的原帖是关于解决此链接器错误:
Undefined symbols for architecture x86_64:
"WindowController::WindowController()", referenced from:
_main in main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
发布后5分钟,我发现我从目标中的“Compile Sources”中遗漏了WindowController.mm,因此编译器甚至从未查看过WindowController.mm。这就是链接器抱怨无法找到构造函数(叹息)的原因。
然而,为了后代,我想留下这篇文章(和链接器错误)并将这篇文章扩展到围绕Objective-C对象制作C ++包装器的主题。据我所知,逆变得引起了很多关注,但这个特殊问题并没有得到很好的处理。
我可以从现在开始解决我自己上面所有可爱的错误,但是为了在其他人的StackOverflow上有这个,如果有人比我对这个主题了解得多,那么就想用这个例子来表示彻底的主题演练(或纠正我的错误),这太棒了!