2015-08-08 74 views
0

我正在練習一本教科書,而且這本書已經過時了,所以我有點想弄清楚它是如何適應新系統的。我已經得到了確切的文本,它的返回隱式轉換會丟失整數精度:'time_t'在Objective C中是什麼意思,我該如何解決它?

'Implicit conversion loses integer precision: 'time_t' (aka 'long') to 'unsigned int''.

本書是「可可規劃爲Mac OS X」由艾倫·希爾加斯,第三版,代碼爲:

#import "Foo.h" 

@implementation Foo 

-(IBAction)generate:(id)sender 
{ 
    // Generate a number between 1 and 100 inclusive 
    int generated; 
    generated = (random() % 100) + 1; 

    NSLog(@"generated = %d", generated); 

    // Ask the text field to change what it is displaying 
    [textField setIntValue:generated]; 
} 

- (IBAction)seed:(id)sender 
{ 
    // Seed the randm number generator with time 
    srandom(time(NULL)); 
    [textField setStringValue:@"Generator Seeded"]; 
} 

@end 

這是對的srandom(time(NULL));一行。

如果我更換timetime_t,談到了另一條錯誤消息:

Unexpected type name 'time_t': unexpected expression.

我沒有什麼線索或者他們的意思做。我用同樣的錯誤閱讀的一個問題顯然是與64位和32位整數有關,但是,我不知道這是什麼意思。或者如何解決它。

回答

0

它只是一個通知。您正在分配'long' to 'unsigned int'

解決方法很簡單。只需點擊指定該值的特定行的左側功能區中的黃色通知圖標即可。它會顯示一個解決方案。雙擊解決方案,它會自動完成一切。

它會匹配等式。但嘗試下一次記住要指定是類型相同..希望這有助於..

4

I don't have a clue what either of them mean. A question I read with the same error was apparently something to do with 64- and 32- bit integers but, heh, I don't know what that means either. Or how to fix it.

那麼你真的需要做一些更多的閱讀,隨時瞭解這些東西的意思,但這裏有一個幾個指針。

當你(如在人類)計數通常使用十進制數。十進制中有10位數字,0到9.如果你想到一個計數器,就像在電錶或汽車裏程表上一樣,它有一個固定的數字位數。所以你可能有一個可以讀取000000到999999的計數器,這是一個六位數的計數器。

一臺計算機表示二進制數字,它有兩個數字0和1.二進制digIT被稱爲BIT。因此,考慮上面的計數器示例,一個32位數字有32位二進制數字,64位和64位二進制數字。

現在,如果你有一個64位數字,並砍掉了前32位,你可能改變其值 - 如果該值只是1,那麼它仍然是1,但如果需要超過32位那麼結果將是一個不同的數字 - 就像截斷小數點9001到01改變數值一樣。

你的錯誤:

Implicit conversion looses integer precision: 'time_t' (aka 'long') to 'unsigned int'

是說你正在做的只是這個,截取了大量的 - long是你的電腦(每臺電腦不上)在64位有符號整數類型 - 到一個較小的一個 - unsigned int是計算機上的32位無符號(無負值)整數類型。

在你的情況精度損失並不重要,因爲你正在使用的語句數量:

srandom(time(NULL));

此行是設置「種子」 - 用於確保每一個隨機數你的程序運行得到不同的隨機數。它使用時間作爲種子,截斷它不會產生任何影響 - 它仍然是一個隨機值。您可以通過使轉換明確了沉默警告:

srandom((unsigned int)time(NULL)); 

但要記住,如果表達式的是很重要的,例如強制轉換會產生數學上不正確的結果,除非該值是已知在目標類型的範圍內。

現在去讀更多!

HTH

+0

這個長的解釋涵蓋了錯誤,但沒有顯示任何類型的解決方案。 – rmaddy

+0

@rmaddy - 哎呀,謝謝,固定 – CRD

+0

非常全面和有益的,謝謝。 –

相關問題