저는 Cocoa 응용 프로그램에서 작은 C++ 라이브러리를 사용하고 있습니다 (atm은 내가하는 방법을 배우는 간단한 예제입니다). (에서Objective-C++ 내에서 C++ 클래스 사용
#import <Foundation/Foundation.h>
#import "testlib.h"
@interface test : NSObject {
testlib::Test* testClass;
}
- (id)init;
- (id)add: (unsigned)value;
- (unsigned)value;
- (void)dealloc;
@property void* testClass;
@end
그리고 마지막으로 구현 :
다음namespace testlib {
class Test {
public:
Test(unsigned a);
Test operator+(const Test& other) const;
Test operator+(unsigned other) const;
Test& operator+=(unsigned other);
Test& operator+=(const Test& other);
unsigned getValue() const;
private:
unsigned theValue;
};
}
나는 때라도 코드를 가진 .H 파일이 다음과 같은
그래서 내가 찾고 네임 스페이스에 작은 C++ 클래스가 test.mm이라는 파일) :#import "test.h"
@implementation test
@synthesize testClass;
- (id)init {
testClass = new testlib::Test(0);
return self;
}
- (void)dealloc {
delete testClass;
[super dealloc];
}
- (id)add: (unsigned)value {
*testClass += value;
return self;
}
- (unsigned)value {
return testClass->getValue();
}
컴파일 할 때 다음과 같은 오류가 발생합니다.
CompileC build/testipod.build/Debug-iphonesimulator/testipod.build/Objects-normal/i386/WindowController.o WindowController.m normal i386 objective-c com.apple.compilers.gcc.4_2
cd /Users/sausalito/eth/testipod
setenv LANG en_US.US-ASCII
setenv PATH "/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc-4.2 -x objective-c -arch i386 -fmessage-length=0 -pipe -std=c99 -Wno-trigraphs -fpascal-strings -fasm-blocks -O0 -Wreturn-type -Wunused-variable -D__IPHONE_OS_VERSION_MIN_REQUIRED=30000 -isysroot /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.1.3.sdk -fvisibility=hidden -mmacosx-version-min=10.5 -gdwarf-2 -iquote /Users/sausalito/eth/testipod/build/testipod.build/Debug-iphonesimulator/testipod.build/testipod-generated-files.hmap -I/Users/sausalito/eth/testipod/build/testipod.build/Debug-iphonesimulator/testipod.build/testipod-own-target-headers.hmap -I/Users/sausalito/eth/testipod/build/testipod.build/Debug-iphonesimulator/testipod.build/testipod-all-target-headers.hmap -iquote /Users/sausalito/eth/testipod/build/testipod.build/Debug-iphonesimulator/testipod.build/testipod-project-headers.hmap -F/Users/sausalito/eth/testipod/build/Debug-iphonesimulator -F/Users/sausalito/eth/testipod/../testlib/build -I/Users/sausalito/eth/testipod/build/Debug-iphonesimulator/include -I/Users/sausalito/eth/testipod/build/testipod.build/Debug-iphonesimulator/testipod.build/DerivedSources/i386 -I/Users/sausalito/eth/testipod/build/testipod.build/Debug-iphonesimulator/testipod.build/DerivedSources -include /var/folders/4f/4fSYMOmtHHSRoBf+XVFQ+k+++TM/-Caches-/com.apple.Xcode.502/SharedPrecompiledHeaders/testipod_Prefix-cwdputxcxpofoydkulngkdplqxbt/testipod_Prefix.pch -c /Users/sausalito/eth/testipod/WindowController.m -o /Users/sausalito/eth/testipod/build/testipod.build/Debug-iphonesimulator/testipod.build/Objects-normal/i386/WindowController.o
In file included from /Users/sausalito/eth/testipod/Classes/test.h:10,
from /Users/sausalito/eth/testipod/WindowController.m:10:
/Users/sausalito/eth/testipod/Classes/testlib.h:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'testlib'
In file included from /Users/sausalito/eth/testipod/WindowController.m:10:
/Users/sausalito/eth/testipod/Classes/test.h:13: error: expected specifier-qualifier-list before 'testlib'
/Users/sausalito/eth/testipod/Classes/test.mm:13:0 /Users/sausalito/eth/testipod/Classes/test.mm:13: error: type of property 'testClass' does not match type of ivar 'testClass'
내가 뭘 잘못하고 있니? C 컴파일러를 사용하여 헤더 파일을 컴파일하는 것처럼 보입니다.
void * 형식으로 멤버를 선언 한 다음 구현시 캐스팅을 사용하면 Objective-C 클래스에서이를 래핑 할 수 있습니다. 그러나 이것은 분명히 그것을하는 가장 편안한 방법은 아닙니다.
감사를 구축 히트 [슈퍼 초기화] - 나는 그것을 잊어 버렸습니다. Objective-C를 처음 접했을 때 나는 보통 C++로 프로그램을했다. –