C++ 变量或字段'commonStack';宣告无效

C++ 变量或字段'commonStack';宣告无效,c++,class,C++,Class,请帮帮我。我收到上面的错误消息,但尚未解决。我已经在这里粘贴了头文件和commonStack函数。也许你会看到我错过了什么。我还收到一条“unterminated ifndef”错误消息。从头文件中可以看到,我用endif结束了这个类。所以我不确定我做错了什么。请帮忙。谢谢 //Header file. //Class definition for the stack ADT #ifndef _mystack_H #include <ostream> #include <f

请帮帮我。我收到上面的错误消息,但尚未解决。我已经在这里粘贴了头文件和commonStack函数。也许你会看到我错过了什么。我还收到一条“unterminated ifndef”错误消息。从头文件中可以看到,我用endif结束了这个类。所以我不确定我做错了什么。请帮忙。谢谢

//Header file. 
//Class definition for the stack ADT

#ifndef _mystack_H
#include <ostream>
#include <fstream>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define _mystack_H


const unsigned int maxSize = 10;

class Stack
{
  public:
            Stack(); //constructor

            ~Stack(); //Destructor

            bool isEmptyStack();

            bool isFullStack();

            void pushStack(int newItem);

            void popStack(int item);

            void initializeStack();

            void fillStack(int numSize);

            void exchangeTopAndBottom(Stack &stk);

            void printStack(Stack &stk);

            int sumStack(Stack &stk);

            void OddElem(Stack &stk);

            //void commonStack(Stack &stk1, Stack &stk2);

            void intersectStack(Stack &stk1, Stack &stk2);

   private:
            int maxSize;  //variable to store the maximum stack size
            int stackTop; //variable to poit to the top of the stack
            Stack arrList;//pointer to the array that holds the stack 
                          //elements

};      

#endif



//commonStack finds the union of two stacks
void Stack::commonStack(Stack &stk1, Stack &stk2)
{
     Stack temp, temp2, tempStk, tempStk1, tempStk2, cStack;
     int elem, elem1, elem2, elem3;

     while (!stk1.isEmptyStack())
     {
       stk1.popStack(elem);
       cStack.pushStack(elem);
       tempStk1.pushStack(elem);
     }

 while (!stk2.isEmptyStack())
 {
       stk2.popStack(elem1);

       while (!tempStk1.isEmptyStack())
       {
             tempStk1.popStack(elem2);

             if (elem1 == elem2)
             {
                       temp.pushStack(elem2);
                       tempStk2.pushStack(elem2);
             }
             else
             {
                 temp2.pushStack(elem2);
                 tempStk2.pushStack(elem2);
             }
       }

       while (!tempStk2.isEmptyStack())
       {
             tempStk2.popStack(elem2);
             tempStk1.pushStack(elem);
       }

       tempStk.pushStack(elem1);
}

 while (!cStack.isEmptyStack())
 {
       temp2.popStack(elem3);
       cStack.pushStack(elem3);
 }

 printStack(cStack);
}
//头文件。
//堆栈ADT的类定义
#如果没有
#包括
#包括
#包括
#包括
#包括
#定义_mystack_H
常量无符号整数maxSize=10;
类堆栈
{
公众:
Stack();//构造函数
~Stack();//析构函数
bool-isEmptyStack();
bool是fullstack();
无效推堆栈(int newItem);
void popStack(int项);
void initializeStack();
无效填充堆栈(int numize);
空隙交换底部(烟囱和stk);
无效打印堆栈(堆栈和stk);
int sumStack(堆栈和stk);
void OddElem(堆栈和stk);
//无效的共用料(料堆和stk1、料堆和stk2);
空烟囱(烟囱和stk1、烟囱和stk2);
私人:
int maxSize;//用于存储最大堆栈大小的变量
int stackTop;//指向堆栈顶部的变量
堆栈arrList;//指向保存堆栈的数组的指针
//元素
};      
#恩迪夫
//commonStack找到两个堆栈的并集
无效堆栈::commonStack(堆栈和stk1、堆栈和stk2)
{
堆栈温度,temp2,tempStk,tempStk1,tempStk2,cStack;
int elem、elem1、elem2、elem3;
而(!stk1.isEmptyStack())
{
stk1.popStack(elem);
cStack.pushStack(elem);
tempStk1.pushStack(elem);
}
而(!stk2.isEmptyStack())
{
stk2.popStack(elem1);
而(!tempStk1.isEmptyStack())
{
tempStk1.popStack(elem2);
if(elem1==elem2)
{
推堆温度(elem2);
温度k2.推堆栈(elem2);
}
其他的
{
temp2.推堆栈(elem2);
温度k2.推堆栈(elem2);
}
}
而(!tempStk2.isEmptyStack())
{
tempStk2.popStack(elem2);
tempStk1.pushStack(elem);
}
tempStk.pushStack(elem1);
}
而(!cStack.isEmptyStack())
{
temp2.popStack(elem3);
cStack.pushStack(elem3);
}
打印堆栈(cStack);
}

您定义了
commonStack
,但从不在
类中声明它(声明被注释掉)。另外,这不是使用头部防护的常用方法,通常是这样做的:

#ifndef MY_HEADER_GUARD_H
#define MY_HEADER_GUARD_H

... code for the header file here, ALL code ...

#endif

将宏定义更改为不以下划线开头的内容,因为这些标识符是为实现保留的。

commonStack
被注释掉,并且您发布的代码中没有
\endif
。@curiousguy:有,只是不在文件末尾。我看到了
\endif
。但是,
commonStack
的声明在哪里呢?正如K-Ballo指出的:(1)commonStack在课堂上被注释掉了(2)你的include守卫关闭了(虽然我不确定宏中的前导下划线是否有什么大不了的,但我知道它是用于符号的,因为链接器行为以及成员函数的commonStack哈希语义……但这没有意义。如果commonStack是一个成员,它应该被定义为一个备用函数(可能是堆栈的朋友)或者,可能是一个将自身与另一个进行比较的成员函数。我忘了取消注释commonStack。当我开始收到错误消息时,我将其注释掉。你说的独立函数或堆栈的朋友是什么意思?你能给我举个例子吗?这是我的第一类项目,所以我不熟悉所有术语。谢谢