2014-09-30 35 views
-3

所以,我似乎有问题与我的代码堆栈之一。显然,它不会将顶层识别为堆栈的参数之一。请,我需要很多帮助。顶部没有在此范围内声明

#include <iostream> 
using namespace std; 
int n; 
typedef struct { 
    int content[100]; 
    int top; 
} stack; 
stack mystack; 
int pushstack(stack *somestack, int somevalue) { 
    if(top+1>=100) 
     return 1; 
    (*somestack).top++; 
    (*somestack).content[(somestack).top]=somevalue; 
    return 0; 
} 
+2

难道你不是指'somestack-> top'? – Biffen 2014-09-30 07:31:01

回答

2

你有两个错误,必须必须改为:

if ((*somestack).top+1>=100) 
    ^^^^^^^^^^ 

(*somestack).content[(*somestack).top]=somevalue; 
        ^
+2

'(* a).b'的常见语法(有些可能会说比较容易阅读)是'a-> b'。 – Biffen 2014-09-30 07:32:43

+2

+1,但在整个过程中可能会更好地使用'(* somestack).'或'somestack->'。 – 2014-09-30 07:33:06

+0

@PaulR:一致性是一个很好的目标,但请与惯用用法保持一致性,而不要使用一些晦涩的玩意。 – Deduplicator 2014-09-30 07:35:41

0

您忘记引用您的堆栈结构的指针,当你在引用topif声明。您需要引用顶部,

if((somestack->top)+1>=100) 
    return 1; 

你也可以做到这一点,你在做你的代码的后半段:

if((*somestack).top)+1>=100) 
    return 1; 

我个人认为第一种方式是更具可读性和减少杂波代码。他们做同样的事情,但我认为->符号更有意义比提领与*指针,然后用.

访问结构领域不要在对第二部分提领指针太

(*somestack).content[(*somestack).top]=somevalue; 
不会忘记

代替

(*somestack).content[(somestack).top]=somevalue; 
0

除了早期的答案,可以矫正你的代码,你也可能要考虑做pushstack的方法你Stack类(这应该是C++,不C,毕竟):

struct stack { 
    int content[100]; 
    int top; 

    int push(int somevalue) { 
     if (top + 1 >= 100) 
      return 1; 
     content[top++] = somevalue; 
     return 0; 
    } 
}; 

你可以使用类是这样的:

stack mystack; 
mystack.push(100); 

正如你所看到的,这个代码是很多清洁,与原始实现不同,功能更简单,更容易阅读和理解。