Использование необъявленного идентификатора во 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];