2009-12-22 84 views
0

我想在那裏我得到這個錯誤信息語法錯誤

pprbc_CONTENT_icverification_act.c", line 99.2: 1506-018 (S) Operand of indirection operator must be a pointer expression

任何人都可以請解釋一下這是什麼意思構建塊?下面

代碼:

*(WORK_migration_ind_f) = 
    *(migration_status_in_MI9_CIRCLE_INFO(WORK_source_circle_f)); 
+7

有沒有機會顯示正在生成錯誤消息的代碼?因爲它本身就是錯誤信息,表明你可能試圖解引用一個文字對象或原始類型 - 當你真的只能遵從一個指針時。即你不能聲明'int myval',然後嘗試'myval-> something',因爲myval不是一個指針。 – 2009-12-22 13:36:15

+0

實際上它可能是一個結構。我敢打賭,你聲明'struct mystruct {int something; }',然後當你的意思是'myobj.something'時嘗試'struct mystruct myobj',然後嘗試'myobj-> something',對吧? – 2009-12-22 13:38:05

+1

感謝您使用導致錯誤的代碼更新您的帖子。現在,你能猜到我們現在想知道的嗎?你可以嗎?你可以嗎?噢..你讓我失望,當然很明顯下一個問題是什麼?是的,我們想知道'WORK_source_circle_f'和'WORK_migration_ind_f'的類型..你不想知道嗎?你是不是有點好奇爲什麼你的編譯器認爲你不使用指針?我很好奇,我也希望你也好奇!餓了!對這種知識的飢渴!當你渴望真相時,編程很有趣:) – 2009-12-22 14:07:58

回答

5

是的,你的東西前面放一個「*」這不是一個指針。

如果您發佈了涉及的代碼行,那麼您會爲自己和所有人贊成。

+0

解決它。函數'migration_status_in_MI9_CIRCLE_INFO(WORK_source_circle_f)'返回一個字符指針。但是這個頭文件應該包含在應用程序缺少核心的深處。所以既然頭沒有被包含,編譯器就假定該函數將返回一個導致上述錯誤的inetger。非常感謝您的建議:) – Vijay 2009-12-22 17:01:24

1

想必你的代碼是這樣的:

int x; 

*x; // apply indirection to non-poiner 

但是這是不可能的,沒有看到導致該錯誤消息的實際代碼說。

1

*(間接)操作符將指針解引用;也就是說,它將一個指針值轉換爲一個l值。間接運算符的操作數必須是指向類型的指針。

1

變量WORK_migration_ind_f或函數migration_status_in_MI9_CIRCLE_INFO(或兩者)的返回類型不是指針類型。您只能取消引用一個指針。

如果你有這樣的代碼:

int *pi; 
int i; 
int f(void); 
int *pf(void); 

接着,下面的 「有意義」:

*pi /* is of type int */ 
*pf() /* is of type int */ 

下列不:

*i /* can't dereference a non-pointer */ 
*f() /* can't dereference a non-pointer */ 

如果你告訴我們, WORK_migration_ind_fWORK_migration_ind_f的聲明,我們可以告訴你更多,但我認爲你應該現在就可以自己判斷出錯了。