2013-03-05 126 views
-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:錯誤:衝突的類型 '流行' C:\ TC \ BIN \ stringrevusingstack.c:28:錯誤:先前的隱式'pop'聲明在這裏炭返回錯誤

在這裏,我返回字符並保存char變量(reverse [i])中返回的字符。那麼爲什麼會出現這個錯誤?

+2

我回答說,在你的[上一篇](http://stackoverflow.com/questions/15228270/array-return-類型)請閱讀您所問問題的答案 – Mike 2013-03-05 17:14:22

回答

0

問題是因爲函數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; 
} 
2

定義了pop的函數原型。這將工作

你得到的錯誤是因爲編譯器的功能pop的定義和聲明混淆。在使用它之前宣佈原型是一個好習慣。

如果你再次看到這種類型的錯誤,確定它是它!

2

你得到這些錯誤的原因是你的功能缺乏prototypes。無論是(前main功能即)利用自己的第一點之前,將所有的功能,或者提供原型爲他們:

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

在沒有原型,C編譯器決定你的pop()函數返回int,默認返回缺乏原型的功能類型。一旦編譯器發現charpop的實際返回類型,則會發出錯誤。

0

您至少在聲明前已使用pop()。至少在使用它之前,您必須先聲明它。

主要添加之前:

char pop(); //declaration 
0

要麼你使用它之前定義的函數或「啪」功能提供了一個聲明(原型)作爲您與「推」來完成:

void push(char); 
char pop(); 
0

的定義後添加

char pop(void); 

0

在C中,您必須在使用它之前聲明該函數。因此,無論你需要在rev之前放置pop(和push)函數,或者你需要幾行向上頂:

void push(char); 
char pop(); 

而且,我懷疑是流行的回線應

return stack[tos];