1

私がやろうとしていることは非常に単純ですが、おそらく構文が間違っています。

パラメータ付きの Objective-C インターフェイスがありNote classます。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'
    }

};

これは、ノートを使用している私のコントローラーです。ファイル拡張子を .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 つのエラーが発生します (正しい行にコメントとして追加しました)。

私が間違っていることをどのように考えていますか?

4

3 に答える 3

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

上記はObj-Cヘッダーファイルに含まれています。.mmファイルに#import "Note.h"ステートメントがあります

于 2012-07-23T19:36:15.480 に答える
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];
}

最後に、Objective-C オブジェクトではないため、@property属性が間違っています。retain代わりに使用assignし、それを作成することをお勧めしreadonlyます。

ほとんどのオブジェクトを初期化するより良い方法constは、コピーではなくオブジェクトへの参照を使用することです。

Note(const string &name)
{
    this->name = name;
}
于 2012-07-23T16:59:23.670 に答える
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
}
于 2012-07-23T17:07:21.640 に答える