2012-02-19 18 views
0

編譯器警告(1):完全執行未完成的實現和指針轉換錯誤。

我比我的.h和.m文件,看看什麼申報和實施,並不能找到任何之間的任何不一致或拼寫錯誤。

編譯器警告(2):指針轉換髮送'NSInteger *'(又名'int *')與'int'類型的表達式不兼容的整數。

我一直在用各種組合的星號25分鐘,編譯器仍然不高興。

#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 

凡我類的實例聲明和初始化:

NSInteger *rows = 7, *columns = 6, *operators = 2, *operands = 6;//compiler warning 2 
Game *game = [Game new]; 
[game init:rows :columns :operators :operands]; 
+0

此致,您需要對C編程語言的基本要點進行回顧。 – ZhangChn 2012-02-19 16:37:59

+0

我試圖編譯你的代碼在一個測試項目,它的工作..試圖清除你的項目 – 2012-02-19 16:56:44

回答

0
NSInteger *rows = 7, *columns = 6, *operators = 2, *operands = 6; 

rows,columns, operators, operandsNSInteger *類型。您需要分配內存,然後需要將7,6,2,6放置在指向的內存位置。用C表示,

int *ptr = 7; // Wrong. Because, ptr is pointing no where to keep 7 in that location. 
+0

我最初沒有星號,但有另一個錯誤。你可以提出一種替代方式或寫作嗎?我有點困惑。 – 2012-02-19 16:44:25

0

你試過了嗎?

NSInteger rows = 7, columns = 6, operators = 2, operands = 6; 

什麼是?

[Game new]; 

編譯器可能期待你實現一個名爲功能。

編輯: 嘗試從您的NSInteger's中刪除所有'*'。

+1

「new」只是一種說法[[Game alloc] init]的方式http://stackoverflow.com/questions/719877/use-of-alloc-init-instead-of-new-objective-c – 2012-02-19 16:34:03

+0

對不起,我並不知道「新」。我總是使用'​​alloc'和'init'。 – 2012-02-19 16:37:34

+0

我根據方法定義和Obj-C語法刪除了星號,我必須採用指針,即通過引用。否則,我會得到一個錯誤。所以我需要的是:NSInteger的聲明和初始化,然後是一個指向它的指針。 – 2012-02-19 16:54:02