-2
#include<stdio.h>
#include<string.h>
#define MAX 30

void push(char );


char stack[MAX];
int tos=0;

int main(){
    char str[]="Arijit Saha";
   // char *final;
   //   final=(char *)rev(str);
   //   printf("%s",final);
    rev(str);
    getch();
    return 1;
}

int rev(char s[]){
    int i;
    for(i=0;i<strlen(s);i++)
    push(s[i]);
    char reverse[strlen(s)];
    int j;
    for(j=0;j<strlen(s);j++)
    reverse[j]=pop();
    printf("%s",reverse);
    return 1;

}

void push(char c){
     stack[tos]=c;
     tos++;
     }
char pop(){
    tos--;
    return stack[tos+1];

}

エラー: C:\TC\BIN\stringrevusingstack.c:38: エラー: 'pop' の型が競合しています C:\TC\BIN\stringrevusingstack.c:28: エラー: 'pop' の以前の暗黙の宣言がここにありました

ここでは、char を返し、返された char を char 変数 ( reverse[i] ) に保存しています。では、なぜこのエラーが発生するのでしょうか。

4

7 に答える 7

2

の関数プロトタイプを定義しますpop。それはうまくいくでしょう

発生するエラーは、コンパイラが関数popの定義と宣言について混乱しているためです。プロトタイプを使用する前に、プロトタイプを宣言することをお勧めします。

そして、このタイプのエラーが再び表示された場合は、それが正しいことを確認してください。

于 2013-03-05T17:10:00.760 に答える
2

これらのエラーが発生する理由は、関数にプロトタイプがないためです。すべての関数を最初の使用ポイントの前(つまりmain関数の前)に移動するか、それらのプロトタイプを提供します。

int rev(char s[]);
void push(char c);
char pop();

プロトタイプがない場合、Cコンパイラは、関数がプロトタイプを欠いているデフォルトの戻り型のpop()関数を返すと判断します。intコンパイラがそれcharが実際の戻りタイプであることを検出するとpop、エラーが発行されます。

于 2013-03-05T17:10:39.637 に答える
0

あなたはpop()少なくともそれを宣言する前に使用しました。少なくとも、使用する前に宣言する必要があります。

メイン追加の前:

char pop(); //declaration
于 2013-03-05T17:10:45.997 に答える
0

問題は、関数 pop() が最初に pop の呼び出しに遭遇するまでに宣言されていないためです。これを修正するには、関数プロトタイプを定義するか、定義の位置を切り替えます。

#include<stdio.h>
#include<string.h>
#define MAX 30

char stack[MAX];
int tos=0;

void push(char c)
{
    stack[tos]=c;
    tos++;
}
char pop()
{
    tos--;
    return stack[tos+1]; 
}

int rev(char s[])
{
    int i;
    for(i=0;i<strlen(s);i++)
        push(s[i]);
    char reverse[strlen(s)];
    for(int j=0;j<strlen(s);j++)
        reverse[j]=pop();
    printf("%s",reverse);
    return 1;
}

int main()
{
    char str[]="Arijit Saha";
    //char *final;
    //final=(char *)rev(str);
    //printf("%s",final);
    rev(str);
    getch();
    return 1;
}
于 2013-03-05T17:17:46.860 に答える
0

使用する前に関数を定義するか、「プッシュ」で行ったように「ポップ」関数の宣言 (プロトタイプ) を提供します。

void push(char);
char pop();
于 2013-03-05T17:11:56.173 に答える
0

追加

char pop(void); 

定義の後。

于 2013-03-05T17:12:36.183 に答える
0

C では、関数を使用する前に宣言する必要があります。したがって、rev の前に pop (および push) 関数を配置する必要があります。または、上に数行必要です。

void push(char);
char pop();

また、ポップのリターンラインは

return stack[tos];
于 2013-03-05T17:14:43.417 に答える