2012-02-17 22 views
0

この問題で約1週間働いています。互換性のないポインタ型の警告ソリューションを調べましたが、このコンパイルエラーをどのように修正できるかについてはまだ混乱しています。警告:互換性のないポインタ型

私はというエラーを取得:

char_stack_interface.c: In function ‘pop_char’: 
char_stack_interface.c:32: warning: passing argument 2 of ‘pop’ from incompatible pointer type 
char_stack_interface.c: In function ‘top_char’: 
char_stack_interface.c:43: warning: passing argument 2 of ‘top’ from incompatible pointer type 

は、これは私のコードです:

char_stack_interface.h:

#ifndef _CHAR_STACK_INTERFACE_H 
#define _CHAR_STACK_INTERFACE_H 

#include "stack.h" 

extern status push_char(stack *p_s, char c); 
extern status pop_char (stack *p_s, char *p_c); 
extern status top_char (stack *p_s, char *p_c); 

#endif 

stack.h:

#ifndef _STACK_H 
#define _STACK_H 

#include "globals.h" 

ABSTRACT_TYPE(stack); 

extern status init_stack (stack *p_S); 
extern bool empty_stack(stack *p_S); 
extern status push  (stack *p_S , generic_ptr data); 
extern status pop  (stack *p_S , generic_ptr *p_data); 
extern status top  (stack *p_S , generic_ptr *p_data); 

#endif 

char_stack_interface。 c:

#include <stdio.h> 
#include <stdlib.h> 
#include "char_stack_interface.h" 
#include "stack.h" 

status push_char(stack *p_s, char c) 
{ 
    char *p_c = NULL; 
    p_c = (char *) malloc(sizeof(char)); 

    if (p_c == NULL) 
     return ERROR; 

    *p_c = c; 

    if (push(p_s, p_c) == ERROR) { 
     free(p_c); 
     return ERROR; 
    } 

    return OK; 
} 
status pop_char (stack *p_s, char *p_c) 
{ 
    char *p_data; 

    if (pop(p_s, p_data) == ERROR) 
     return ERROR; 

    *p_c = *p_data; 

    free(p_data); 

    return OK; 
} 
status top_char (stack *p_s, char *p_c) 
{ 
    char *p_data; 

    if (top(p_s, &p_data) == ERROR) 
     return ERROR; 

    *p_c = *p_data; 

    return OK; 
} 
+3

詳細を追加する必要があります。警告を出している行だけでなく、ヘッダー(またはそこからの主要な型定義)をよく貼り付けてください。 – chetan

+0

ちょうどダミーのように私は私のエラーメッセージをそこに入れていないダミーのように実現しました: – Cka91405

+3

@ Cka91405: 'pop'と' top'プロトタイプはどのように見えますか? – netcoder

答えて

2

どのようなgeneric_ptr型でも、明らかにコンパイラは自動的に 'char *'型を汎用ptr型にキャストできません。 (それは通常の場合だと)generic_ptrをされたと仮定すると、

ポップ(P_S、(generic_ptr)P_DATA)

+0

私はそれを試してみましょう! – Cka91405

+0

それでした!とてもシンプルだったオハイオ州の男!大変ありがとうございます – Cka91405

+1

大歓迎です。 – chetan

2

typedef void* generic_ptr; 

ポップするため、2番目の引数の明示的なケースをやってみて、トップなど

extern status pop  (stack *p_S , void **p_data); 

そして、あなたは次のようにそれを呼び出している:次にpopです

pop(stack*, char*); 

したがって、無効なポインタ型からのvoid**には、char*引数が渡されています。ポインタがpopでどのように処理されるかに応じて、ポインタへのポインタを渡すか、または明示的にキャストして状況を処理する方法をコンパイラに明示的に伝える必要があります。

+0

私は教科書からコードをコピーしてファイルに置いて、その本のようなものは何も表示しないので、私は混乱しています。それは私をもっと混乱させている。 :( – Cka91405

+0

@ Cka91405:それは何のように何も表示されません? – netcoder

関連する問題