C++ C++;堆栈推送方法不将结构推送到堆栈上,只返回0

C++ C++;堆栈推送方法不将结构推送到堆栈上,只返回0,c++,class,struct,stack,typedef,C++,Class,Struct,Stack,Typedef,这是我的双堆栈程序。当我尝试调用push方法时,它不会将结构推送到堆栈上,它会推1,即使我传入参数的结构,而函数参数正在接收结构。非常感谢您的帮助。我只想将我创建的结构推送到堆栈中,然后当我弹出它时,我想弹出该结构并将其打印到控制台。我很挣扎,因为如果我改变vmr,它就会抱怨。我的代码如下: #include <iostream> #include <stdio.h> #include <stdlib.h> #include <time.h> us

这是我的双堆栈程序。当我尝试调用push方法时,它不会将结构推送到堆栈上,它会推1,即使我传入参数的结构,而函数参数正在接收结构。非常感谢您的帮助。我只想将我创建的结构推送到堆栈中,然后当我弹出它时,我想弹出该结构并将其打印到控制台。我很挣扎,因为如果我改变vmr,它就会抱怨。我的代码如下:

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
using namespace std;
const int MAX = 20;
int vmr = 1;
int seed;
int upper;
int lower;
float randNum;
float randNumArr;
int dagabacount = 0;
int numberArrivals;
clock_t start;
double duration;
int fixedvehicles = 0;

//struct for vmr
struct vmr{
    char type;
    char name;
    int repairTime;
    int startTime;
    int finishTime;
};

//declaring dualstack
class repairStack
{
    private:
        int topT;
        int topS;
        int ele[MAX];

    public:
        repairStack();
        void pushTie   (struct vmr);
        void pushStar  (struct  vmr);
        int  popTie    (int *vmr); 
        int  popStar   (int *vmr);
}; 

//initializing dualstack
repairStack::repairStack()
{
    topT = -1;
    topS = MAX;
}

//pushing to tiestack
void repairStack::pushTie( struct vmr )
{
    if( topS == topT + 1 )
    {
        cout<<"\nStack Overflow tStack";
        dagabacount++;
        return;
    }

    topT++;
    ele[topT] = vmr;

    //cout<<"\nInserted item in tStack : "<< vmr;    
}

//pushing to starstack
void repairStack::pushStar( struct vmr )
{
    if( topS == topT + 1 )
    {
        cout<<"\nStack Overflow sStack";
        dagabacount++;
        return;
    }

    topS--;
    ele[topS] = vmr;

    //cout<<"\nInserted item in sStack : "<< vmr <<endl;    
}

//popping to tiestack
int repairStack::popTie( int *vmr )
{
    if( topT == -1 )
    {
        cout<<"\nStack Underflow tStack";
        return -1;
    }

    *vmr = ele[topT--];
    return 0;
}

//popping to starstack
int repairStack::popStar( int *vmr )
{
    if( topS == MAX )
    {
        cout<<"\nStack Underflow sStack";
        return -1;
    }

    *vmr = ele[topS++];
    return 0;
}

int getNumArrivals(){
        randNumArr = float(rand()) / (float(RAND_MAX) + 1.0);
          if(randNumArr < 0.25){
             return 1;
          }
          else if(.25 <= randNumArr < .50){
              return 2;
          }
          else if(.50 <= randNumArr < .75){
              return 3;
          }
          else{
             return 4;
          }
}

int main()
{ 
    //asking user for bounds
    cout << "Please give seed value: ";
    cin >> seed;
    cout << "Please give lower bound of stack: ";
    cin >> lower;
    cout << "Please give upper bound of stack: ";
    cin >> upper;
    srand(seed);
    //initalizing stack 's'
    repairStack s = repairStack();

    //initializing clock to 0 for first arrivals
    start = clock();
    duration = ( clock() - start ) / (double) CLOCKS_PER_SEC;
    cout<<"printf: "<< duration <<'\n';

    while(dagabacount < 5){
        //getting numberArrivals either 1,2,3,4
        numberArrivals = getNumArrivals();
        cout << "Number of Arrivals: " << numberArrivals;
        for(int i = 0; i < numberArrivals; i++){
        //getting random number between 0 and 1 to see if its T or S

          randNum = float(rand()) / (float(RAND_MAX) + 1.0);
          //if tie then push tie
          if(randNum < 0.75){
            struct vmr Tie_A;
            Tie_A.type='T';
            Tie_A.repairTime = 3;
            Tie_A.startTime = clock();
            Tie_A.finishTime = 0;
            Tie_A.name = 'A';
            s.pushTie(Tie_A);
          }
          //if star then push star
          else{
            struct vmr StarA;
            StarA.type='S';
            StarA.repairTime = 7;
            StarA.startTime = clock();
            StarA.finishTime = 0;
            StarA.name = 'A';
            s.pushStar(StarA);
          }
        }

        //fixing star if star stack is not empty, if so, fix a tiefighter if theres one in stack
        if(s.popStar(&vmr) == 0){
            cout << "\nFixed Star" << endl << endl;
            fixedvehicles++;
        }
        else{
            if(s.popTie(&vmr) == 0){
                cout << "\nFixed Tie" << endl << endl;
                fixedvehicles++;
            }
            else{
                cout << "Underflow" << endl;
            }
        }

    }
        cout << "\n5 Vehicles Rejected" << endl;
        cout << "# of Vehicles Serviced: " << fixedvehicles << endl;
        cout << "Average Time of Repair: " << endl;
    return 0;
}
#包括
#包括
#包括
#包括
使用名称空间std;
常数int MAX=20;
int-vmr=1;
int种子;
int-upper;
int较低;
浮动随机数;
浮动兰德努马尔;
int-dagabacount=0;
整数竞争对手;
时钟没有启动;
双倍持续时间;
int fixed车辆=0;
//vmr的结构
结构vmr{
煤焦类型;
字符名;
整修时间;
int开始时间;
int完成时间;
};
//声明双堆栈
类修复堆栈
{
私人:
int topT;
int topS;
int ele[最大值];
公众:
repairStack();
无效拉杆(结构vmr);
无效pushStar(结构vmr);
int popTie(int*vmr);
int popStar(int*vmr);
}; 
//初始化双堆栈
repairStack::repairStack()
{
topT=-1;
topS=最大值;
}
//推到铁钉上
无效修复堆栈::pushTie(结构vmr)
{
如果(topS==topT+1)
{

请尽量避免使用全局变量。或者至少给它起一些特殊的名字,比如
glob_myVarName
。在代码中,您有一个全局变量
vmr
struct vmr
。您的push方法有一个参数没有名称。您只指定了类型。方法引用了全局
vmr
变量

您的方法应具有如下签名:

void repairStack::pushTie(struct vmr v)
<> > <代码>结构> /COD>当C++声明“强>变量>(不是结构本身)时,关键字是冗余的,因此可以使用< /P>
void repairStack::pushTie(vmr v)

尽量避免使用全局变量。或者至少给它起一些特殊的名字,比如
glob_myVarName
。在代码中,您有一个全局变量
vmr
struct vmr
。push方法有一个参数没有名称。您只指定了类型。方法引用了全局
vmr
变量

您的方法应具有如下签名:

void repairStack::pushTie(struct vmr v)
<> > <代码>结构> /COD>当C++声明“强>变量>(不是结构本身)时,关键字是冗余的,因此可以使用< /P>
void repairStack::pushTie(vmr v)

void-pushTie(struct-vmr)
为什么在这里写
struct
?我不知道它的意思,是吗?如果你想传递
vmr
类型的参数,它应该是
void-pushTie(vmr x)
。将变量命名为与您在不同地方使用的类型相同的名称是相当令人困惑的。这可能是造成混淆的一个原因:为什么要标记
typedef
?代码中没有typedef…不要对不同的事物使用相同的名称。
vmr
是一个结构、一个全局
int
和不同的局部变量。这非常困难请不要故意破坏您的帖子,为他人做更多的工作。通过在Stack Exchange(SE)网络上发布,您已授予SE在下发布内容的不可撤销权利(即,无论您未来的选择如何)。根据SE策略,非故意破坏版本将被分发。因此,任何故意破坏行为都将被还原。请参阅:。如果允许删除,则在帖子下方左侧有一个“删除”按钮,但它仅在浏览器中,而不是在移动应用程序中。
void pushTie(struct vmr)
为什么要在这里写
struct
?我不知道它是什么意思,是吗?如果要传递
vmr
类型的参数,它应该是
void pushTie(vmr x)
。将变量命名为与您在不同地方使用的类型相同的名称是相当令人困惑的。这可能是造成混淆的一个原因:为什么要标记
typedef
?代码中没有typedef…不要对不同的事物使用相同的名称。
vmr
是一个结构、一个全局
int
和不同的局部变量。这非常困难请不要故意破坏您的帖子,为他人做更多的工作。通过在Stack Exchange(SE)网络上发布,您已授予SE在下发布内容的不可撤销权利(即,无论您未来的选择如何)。根据SE策略,非故意破坏版本将被分发。因此,任何故意破坏行为都将被还原。请参阅:。如果允许删除,则在帖子下方左侧有一个“删除”按钮,但它仅在浏览器中,而不是在移动应用程序中。