我想要做的很简单,但我的语法错误。
我有一个带有Note class
参数的Objective-C接口。 Note.h是一个C ++类,基本上如下所示:
#include <string>
using namespace std;
class Note {
public:
string name;
Note(string name){
this->name = name; // ERROR: Cannot find interface declaration for 'Note'
}
};
这是我的控制器在哪里使用Note。我将文件扩展名更改为.mm
@class Note;
@interface InstrumentGridViewController : UIViewController {
@public
Note* note;
}
@property (nonatomic, retain) Note* note;
这就是我使用它的方式:
@implementation InstrumentGridViewController
@synthesize note;
- (void)buttonPressed:(id)sender {
note = Note("fa"); // ERROR: Cannot convert 'Note' to 'Note*' in assignment
NSLog(@"naam van de noot is %s", note->name); // ERROR: Cannot find interface declaration for 'Note'
}
我收到了这三个错误(我已将它们添加为正确的注释)
知道我做错了怎么办?
答案 0 :(得分:0)
您需要使用Note
分配new
对象:
- (void)buttonPressed:(id)sender
{
if (note != 0)
delete note;
note = new Note("fa");
NSLog(@"naam van de noot is %s", note->name.c_str());
}
然而,在按钮按下动作方法中这样做是不对的......
另外,请不要忘记在对象的delete
方法中使用dealloc
:
- (void)dealloc
{
delete note;
[super dealloc];
}
最后,您的@property
属性retain
是错误的,因为它不是Objective-C对象;而是使用assign
,最好还是readonly
。
初始化大多数对象的更好方法是使用const
对它们的引用而不是副本:
Note(const string &name)
{
this->name = name;
}
答案 1 :(得分:0)
您的Note C ++类无效。改为将其声明改为:
class Note {
public:
string name;
Note(string aName) {
name = aName;
}
};
同时更改InstrumentGridViewController
:
- (void)buttonPressed:(id)sender {
note = new Note("fa");
NSLog(@"naam van de noot is %s", note->name);
}
- (void)dealloc {
delete note;
[super dealloc]; // Use this only if not using ARC
}
答案 2 :(得分:0)