C++ 如何用非零返回码诊断主退出

C++ 如何用非零返回码诊断主退出,c++,C++,我把这个main作为一个更大的程序的一部分,但是每次我运行这个程序,我只得到一次循环的输出,然后程序退出,返回一个巨大的int。如何找出代码中的问题/问题在哪里 我试着玩弄我的极限,但没有用 #include <iostream> #include <typeinfo> #include "Employee.h" #include "Staff.h" #include "Education.h" #include "Faculty.h" #include "Parttim

我把这个main作为一个更大的程序的一部分,但是每次我运行这个程序,我只得到一次循环的输出,然后程序退出,返回一个巨大的int。如何找出代码中的问题/问题在哪里

我试着玩弄我的极限,但没有用

#include <iostream>
#include <typeinfo>
#include "Employee.h"
#include "Staff.h"
#include "Education.h"
#include "Faculty.h"
#include "Parttime.h"

using namespace std;

int main() {
    Staff s1("Allen", "Paita", "123", "M", "2/23/59", 50.00);
    Staff s2("Zapata", "Steven", "456", "F", "7/12/64", 35.00);
    Staff s3("Rios", "Enrique", "789", "M", "6/2/70", 40.00);
    Education e1("PHD", "Engineering", 3);
    Education e2("PHD", "English", 1);
    Education e3("MS", "Physical Education", 0);
    Faculty f1("Johnson", "Anne", "243", "F", "4/27/62", "FU", e1);
    Faculty f2("Bouris", "William", "791", "M", "3/14/75", "AO", e2);
    Faculty f3("Andrade", "Christopher", "623", "M", "5/22/80", "AS", e3);
    Parttime p1("Guzman", "Augusto", "455", "F", "8/10/77", 35.00, 30);
    Parttime p2("Depirro", "Martin", "678", "F", "9/15/87", 30.00, 15);
    Parttime p3("Aldaco", "Marque", "678", "F", "11/24/88", 20.00, 35);
    Employee *eArray[] = {&p2, &s2, &s3, &s1, &f1, &f3, &p1, &f2, &p3};
    double totalPartTime = 0;
    double trueTotal = 0;

    for (int i = 0; i < sizeof(eArray) / sizeof(eArray[0]); i++) {
        if (typeid(*eArray[i]) == typeid(Staff)) {
            cout << "Staff: \n";
            Staff * s = dynamic_cast<Staff*>(eArray[i]);
            s->putData();
        }
        else if (typeid(*eArray[i]) == typeid(Faculty)) {
            cout << "Faculty: \n";
            Faculty * f = dynamic_cast<Faculty*>(eArray[i]);
            f->putData();
        }
        else if (typeid(*eArray[i]) == typeid(Parttime)) {
            cout << "Parttime: \n";
            Parttime * p = dynamic_cast<Parttime*>(eArray[i]);
            p->putData();
            totalPartTime += p->monthlyEarnings();
        }
        else {
            cout << "Employee: \n";
            eArray[i]->putData();
        }
        trueTotal += eArray[i]->monthlyEarnings();
        cout << endl;
    }
    cout << "Total Monthly Salary for all Part-Time Staff: " << totalPartTime << endl;
    cout << "Total Monthly Salary for all Employees: " << trueTotal << endl;


    return 0;
}
#包括
#包括
#包括“Employee.h”
#包括“Staff.h”
#包括“Education.h”
#包括“Faculty.h”
#包括“Parttime.h”
使用名称空间std;
int main(){
工作人员s1(“艾伦”、“佩塔”、“123”、“M”、“2/23/59”、“50.00”);
工作人员s2(“Zapata”、“Steven”、“456”、“F”、“7/12/64”,35.00);
员工s3(“里奥斯”、“恩里克”、“789”、“M”、“6/2/70”、“40.00”);
教育e1(“博士”,“工程”,3);
教育e2(“博士”,“英语”,1);
教育e3(“MS”,“体育”,0);
f1学院(“约翰逊”、“安妮”、“243”、“F”、“4/27/62”、“傅”、“e1”);
f2系(“布里斯”、“威廉”、“791”、“M”、“3/14/75”、“AO”、e2);
学院f3(“安德拉德”、“克里斯托弗”、“623”、“M”、“5/22/80”、“AS”、“e3”);
兼职p1(“Guzman”、“Augusto”、“455”、“F”、“8/10/77”、“35.00、30”);
兼职p2(“德皮罗”、“马丁”、“678”、“F”、“9/15/87”、30.00、15);
兼职p3(“Aldaco”、“Marque”、“678”、“F”、“11/24/88”、20.00、35);
Employee*array[]={&p2、&s2、&s3、&s1、&f1、&f3、&p1、&f2、&p3};
双总兼职=0;
双倍真实总数=0;
对于(int i=0;iMonthLearnings();
}
否则{
cout putData();
}
trueTotal+=eArray[i]>monthlearnings();

听起来你可能需要学习如何使用调试器来逐步调试代码。有了一个好的调试器,你可以逐行执行你的程序,看看它偏离了你的预期。如果你要做任何编程,这是一个必不可少的工具。进一步阅读:假设
员工
有一个
虚拟void putData()=0;
方法,为什么不在没有所有动态强制转换的情况下调用它呢?仅供参考,返回的代码是0xC0000374-堆损坏例外这是对OOP的公然滥用。
Employee
应该拥有您需要的所有接口功能,并且您的代码不应该关心给定的
员工*
是否是
Faculty
、a
Parttime
等-您可能有类似于
isParttime()或
putData()的虚拟方法基础类中不同的派生类可以以不同的方式实现。<代码> DyjixMask> <代码>和代码>是强的符号,表明您做的是错误的。最好不要尝试这样的转换,而是从地上学习C++。它们是两种不同的语言,具有不同的范式和IDIO。太太