Sqlite3 предупреждает о «несовместимых типах указателей» - PullRequest
0 голосов
/ 15 марта 2012

Я довольно новичок в sqlite (3 часа)

Здесь я хочу получить строку базы данных в пользовательский объект (объекты имеют тот же номер свойства, что и номер.столбцов в таблице ... так что это не должно быть проблемой там)

Так вот мой код:

#import <Foundation/Foundation.h>
#import "/usr/include/sqlite3.h"
#import "Headers.h"
@interface DataDb : NSObject{
sqlite3 *database;
}

+(DataDb*)database;
+(Singleton*)getSgForIndex:(int)index;

@end





#import "DataDb.h"

@implementation DataDb

static DataDb *database;


+(DataDb*)database
{
    if(database==nil){
        database=[[DataDb alloc]init];
    }
    return database;
}


-(id)init{
    if(self=[super init]){
        NSString *sqliteDb =[[NSBundle mainBundle] pathForResource:@"Data" ofType:@"sqlite3"];

        if(sqlite3_open([sqliteDb UTF8String], &database) !=SQLITE_OK){
            NSLog(@"Failed to open database!");
            return nil;
        }

    }
    return self;
}


+(Singleton*)getSgForIndex:(int)index{

    Singleton *returnSingleton =[[[Singleton alloc]init]autorelease];
    NSString *query =[NSString stringWithFormat:@"SELECT * FROM Quiz WHERE Q_Id=%i",index];
    sqlite3_stmt *statement;

    if (sqlite3_prepare_v2(database,[query UTF8String], -1, &statement, NULL)==SQLITE_OK) {
        NSLog (@"Works!");
        /*
        ...code...
        */

        sqlite3_finalize(statement);
    }else{
        NSLog(@"Failed!!");
    }


    return returnSingleton;
}


-(void)dealloc{
    sqlite3_close(database);
    [super dealloc];
}
@end

.. и компилятор имеет следующую проблему наsqlite3_prepare_v2 function:

Несовместимые типы указателей, передающие «DataDb *» параметру типа «sqlite3 *» (он же «struct sqlite3 *»)

Чтобы быть справедливым ... кодмодифицированную версию примера кода, которую я нашел, но она сработала для рассматриваемого парня, и я не понимаю, почему она не работает для меня

1 Ответ

0 голосов
/ 15 марта 2012

Поскольку вы объявляете getSgForIndex как метод класса, а не как экземпляр, ссылка на базу данных заканчивается на static DataDb *database, а не на sqlite3 *database, который вы хотите.Вы должны будете сделать getSgForIndex методом экземпляра, а не методом класса.(и вы можете не называть их обеими базами данных, чтобы уменьшить путаницу)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...