访问objective-c类中的c ++ datamember

时间:2012-07-23 16:48:34

标签: objective-c objective-c++

我想要做的很简单,但我的语法错误。

我有一个带有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'
}

我收到了这三个错误(我已将它们添加为正确的注释)

知道我做错了怎么办?

3 个答案:

答案 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)

由于我Cannot find interface declaration for 'Note' @class Note Obj-C controller .h file.导致@class错误,这很奇怪,因为我有一个使用// used typedef struct <classname> <classname> typedef struct Note Note; // instead of @class Note 的工作示例项目,并且工作正常。

我使用前向声明按照描述方式herehere.

修复了它
#import "Note.h"

以上是Obj-C头文件。在.mm文件中输入{{1}}语句