Символ печати XCode не найден для моей функции C, которая использовалась в теле метода Objective C - PullRequest
1 голос
/ 06 февраля 2010

Xcode build печатает эту ошибку.

Неопределенные символы:
"EGViewportDimensionMake (без знака int, unsigned int, unsigned int, unsigned int) ", по ссылке от: - [Renderer render] в Renderer.o ld: символ (ы) не найдены collect2: ld возвращен 1 статус выхода

Я не могу понять, в чем проблема. Я не очень хорош в классическом синтаксисе Си. Это файлы исходного кода функции:

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;
}

Я ссылался и использовал это как:

Renderer.mm

#import "EGViewportDimension.h"

//.... many codes omitted.

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

Ответы [ 2 ]

0 голосов
/ 06 февраля 2010

Я решил это, переименовав Renderer.mm в Renderer.m. Было использовано несколько классов C ++, поэтому я сделал это как код Objective-C ++, но возникла некоторая проблема. Я удалил все вызовы C ++ и переименовал его в код Objective-C.

Но я до сих пор не знаю, в чем проблема с Objective-C ++ с классическим определением функции C.

---- (редактировать) ----

Я задал это как еще один вопрос, и я получил ответ. Посмотреть здесь: Запрещено ли вызывать классическую функцию C из тела метода класса Objective-C ++?

0 голосов
/ 06 февраля 2010

Это не компилятор, а проблема компоновщика. Вы ссылались на этот метод из [Renderer render], однако компоновщик не может его найти. Вы проверяли, что включили EGViewportDimension.h в соответствующем месте (например, Renderer.m)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...