Ostrzeżenie kompilatora(1): Niekompletna implementacja
Porównałem moje pliki .h i .m, aby zobaczyć jakiekolwiek niespójności lub błędy ortograficzne między tym, co zadeklarowano i zaimplementowałem, i nie mogę ich znaleźć.
Ostrzeżenie kompilatora (2): niezgodna konwersja liczby całkowitej na wskaźnik wysyłająca „NSInteger*” (aka „int*”) z wyrażeniem typu „int”.
Przez 25 minut bawiłem się gwiazdkami w różnych kombinacjach, a kompilator nadal jest niezadowolony.
#import "Game.h"
#import "stdlib.h"
const int MAXRAND = 15;
const int MAXCOL = 7;
const int MAXROW = 9;
NSInteger gameState[MAXROW][MAXCOL];
NSInteger answerBoard[MAXROW][MAXCOL];
@implementation Game//compiler warning 1
-(void)init:(NSInteger*) rows: (NSInteger*) columns: (NSInteger*) operators:(NSInteger*) operands{
NSLog(@"init sent");
numRows = *rows;
numColumns = *columns;
numOperators = *operators;
numOperands = *operands;
//seed random number generator
//generate rand nums for operands
int operandList[numOperands];
for (int i = 0; i < numOperands; i++) {
srandom(time(NULL));
operandList[i] = (random()%MAXRAND);
}
//generate state and answer board
BOOL gameState[numRows][numColumns];
NSInteger answerBoard[numRows][numColumns];
for (int i = 0; i < numRows; i++) {
for (int j = 0; j < numColumns; j++) {
gameState[i][j] = NO;
answerBoard[i][j] = (operandList[random()%numOperands])+
(operandList[random()%numOperands])-
(operandList[random()%numOperands]);
}
}
}
-(void)updateGame:(NSInteger*)enteredNum{
NSLog(@"updateGame sent");
for (int i = numColumns; i > 0; i--) {
for (int j = numRows; j > 0; j--) {
if (gameState[i][j] == NO){
if (*enteredNum == answerBoard[i][j]){
gameState[i][j] = YES;
}
}
}
}
}
@end//Game
#import <Foundation/Foundation.h>
@interface Game : NSObject
{
NSInteger numRows, numColumns, numOperators, numOperands;
}
-(void)init:(NSInteger*) rows: (NSInteger*) columns: (NSInteger*) operators:(NSInteger*) operands;
-(void)updateGame:(NSInteger*) enteredNum;
@end
Gdzie instancja mojej klasy jest zadeklarowana i zainicjowana:
NSInteger *rows = 7, *columns = 6, *operators = 2, *operands = 6;//compiler warning 2
Game *game = [Game new];
[game init:rows :columns :operators :operands];
2 odpowiedzi
NSInteger *rows = 7, *columns = 6, *operators = 2, *operands = 6;
rows,columns, operators, operands
są typu NSInteger *
. Musisz przydzielić pamięć, a następnie umieścić 7,6,2,6 we wskazanych lokalizacjach pamięci. W kategoriach C,
int *ptr = 7; // Wrong. Because, ptr is pointing no where to keep 7 in that location.
Próbowałeś?
NSInteger rows = 7, columns = 6, operators = 2, operands = 6;
I co jest?
[Game new];
Kompilator prawdopodobnie oczekuje, że zaimplementujesz funkcję o nazwie nowy.
EDYCJA: Spróbuj usunąć wszystkie „*” z NSInteger.
Podobne pytania
Powiązane pytania
Nowe pytania
objective-c
Tego znacznika należy używać tylko w przypadku pytań dotyczących funkcji Objective-C lub zależnych od kodu w języku. Tagi [cocoa] i [cocoa-touch] powinny być używane, aby zapytać o ramy lub klasy Apple. Użyj powiązanych tagów [ios], [macos], [apple-watch] i [tvos] w przypadku problemów specyficznych dla tych platform.