Использование необъявленного идентификатора во ViewController

Я знаю, что это тот тип вопросов, который можно задавать каждый день, но дело в том, что ответ может быть разным для каждого вопроса, а я пока не нашел ни одного.

В настоящее время я настоящий новичок в Objective C, и я разрабатываю приложение, используя платформу OpenCV,

Я следил за этим сайтом для обучения, а потом у меня возникла проблема.

Я скопировал / вставил 3 метода, которые приведены на сайте, чтобы конвертировать cv::Mat в UIImage и UIImage в cv::Mat, но я не могу их использовать:

Мой *.pch файл:

#import <Availability.h>

#ifndef __IPHONE_5_0
#warning "This project uses features only available in iOS SDK 5.0 and later."
#endif

#ifdef __cplusplus
#import <opencv2/opencv.hpp>
#endif

#ifdef __OBJC__
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#endif

Мой файл ViewController.hh

#import <UIKit/UIKit.h>
@interface ViewController : UIViewController

- (cv::Mat)cvMatFromUIImage:(UIImage *)image;
- (cv::Mat)cvMatGrayFromUIImage:(UIImage *)image;
- (UIImage *)UIImageFromCVMat:(cv::Mat)cvMat;
@end

и мой файл ViewController.mm

#import "ViewController.hh"

@interface ViewController ()

@end


@implementation ViewController

- (cv::Mat)cvMatFromUIImage:(UIImage *)image
{
    @@@//what is given in the linked website
    return cvMat;
}

- (cv::Mat)cvMatGrayFromUIImage:(UIImage *)image
{
    @@@//what is given in the linked website
    return cvMat;
}

-(UIImage *)UIImageFromCVMat:(cv::Mat)cvMat
{
    @@@//what is given in the linked website    
    return finalImage;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    NSString* filename = [[NSBundle mainBundle] pathForResource:@"openCV" ofType:@"jpg"];
    UIImage *image = [UIImage imageWithContentsOfFile:filename];

    cv::Mat inputMat = cvMatFromUIImage(image);
    UIImage *newImage = UIImageFromCVMat(inputMat);

    self.view.backgroundColor = [UIColor colorWithPatternImage:newImage];
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"HelloWorld !" message:@"Welcome to OpenCV !" delegate:self cancelButtonTitle:@"Continue" otherButtonTitles:nil, nil];
    [alert show];
}

- (void)viewDidUnload
{
    [super viewDidUnload];
    // Release any retained subviews of the main view.
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}

@end

2 ошибки находятся в строках, которые одиноки в (void) viewDidLoad в .mm файл, он говорит, что оба cvMatFromUIImage а также UIImageFromCVMat не объявлены

Это может быть глупый вопрос, наверное, я что-то пропустил, но не знаю что.

Пожалуйста, помогите мне:)

1 ответ

Решение

Я думаю, что вы определили свои функции в Objective-C, но используете стандарт C для их вызова... Измените их:

cvMatFromUIImage(image)
UIImageFromCVMat(inputMat)

в

[self cvMatFromUIImage:image];
[self UIImageFromCVMat:inputMat];
Другие вопросы по тегам