2010-02-06 1 views
1

Xcode 빌드가이 오류를 인쇄합니다.Objective-C 메서드 본문에 사용 된 C 함수에 Xcode 인쇄 기호가 없습니다.

정의되지 않은 심볼 :
"EGViewportDimensionMake (부호없는 INT, 부호 INT 부호없는 INT, 부호 INT)"에서 참조 : - [렌더러 렌더링] Renderer.o의 LD에서 : 심심하지 찾았습니다 collect2 : ld 가 종료 됨 1 종료 상태

무엇이 문제인지 알 수 없습니다. 고전적인 C 구문이 좋지 않습니다. 이 함수의 소스 코드 파일은 다음과 같습니다 EGViewportDimension.h

#import <Foundation/Foundation.h> 

struct EGViewportDimension 
{ 
    NSUInteger x; 
    NSUInteger y; 
    NSUInteger width; 
    NSUInteger height; 
}; 
typedef struct EGViewportDimension EGViewportDimension; 

EGViewportDimension EGViewportDimensionMake(NSUInteger x, NSUInteger y, NSUInteger width, NSUInteger height); 

EGViewportDimension.m

#import "EGViewportDimension.h" 

EGViewportDimension EGViewportDimensionMake(NSUInteger x, NSUInteger y, NSUInteger width, NSUInteger height) 
{ 
    EGViewportDimension dim; 
    dim.x = x; 
    dim.y = y; 
    dim.width = width; 
    dim.height = height; 
    return dim; 
} 

나는 참조와 같은 사용 :

렌더러 .

#import "EGViewportDimension.h" 

//.... many codes omitted. 

EGViewportDimension vdim = EGViewportDimensionMake(0, 0, backingWidth, backingHeight); 
+1

설명해 주셔서 감사합니다. EGViewPortDimension.m이 대상의 빌드 (또는 컴파일) 폴더에 포함되어 있는지 확인 했습니까? –

+0

프로젝트 트리에서 지금 확인했습니다. 그리고 여기에 존재합니다. 대상> app3> 소스 컴파일 (17)> EGViewportDimention.m – Eonil

+0

감사합니다. – Eonil

답변

0

Renderer.mm을 Renderer.m으로 변경하여 해결했습니다. Objective-C++ 코드로 만들었으므로 몇 가지 C++ 클래스가 사용되었지만 문제가있었습니다. 모든 C++ 호출을 제거하고 Objective-C 코드로 이름을 변경했습니다.

하지만 여전히 고전적인 C 함수 정의로 Objective-C++의 문제점을 알지 못합니다.

---- (편집) ---- 나는 또 다른 질문으로 이것을 요구하고 나는 대답을 얻었다. 참조 : Does it prohibited calling classic C function from Objective-C++ class method body?

0

이것은 컴파일러가 아니라 링커 문제입니다. 이 메서드는 [Renderer render]에서 참조했지만 링커에서 찾을 수 없습니다. 적절한 장소 (예 : Renderer.m)에 EGViewportDimension.h을 포함했는지 확인 했습니까?

+0

예, 질문 할 Renderer.mm 코드 조각을 추가했습니다. 잘못된 C 구문을 사용했다고 생각합니다. 그러나 나는 그것을 알아낼 수 없다. – Eonil

관련 문제