【问题标题】:Vector/Array inside Object, Holding Objects of Another Class对象内的向量/数组,保存另一个类的对象
【发布时间】:2016-01-23 19:12:55
【问题描述】:

我正在尝试存储基类的对象 (employee),或指向另一个类 (finance) 对象中的向量/数组内的对象的指针。员工对象的数量取决于用户,因此它需要动态工作。到目前为止,我有这个:

finance.h

#ifndef FINANCE
#define FINANCE
#include "freight.h"

class finance
{
public:
    finance();
    ~finance();
};

#endif // FINANCE

finance.cpp

#include "finance.h"
using namespace std;

finance::finance()
{
    vector<employee *> vemployee; //first problem line
}

finance::~finance()
{

}

main.cpp

void add_manager()
{
    string name;
    name = get_string_input("Please input the name of the employee.");
    vManagers.push_back(new manager(name)); //second problem line
    ask_employee();
}

Main.cpp 还包含在我所有的.h 文件以及finance.cpp 中。我在 main 和 finance.cpp 上都遇到错误,说的是预期的主表达式,但没有在范围内声明。

注意:

我显然做错了什么,但老实说我不知道​​向量是我还没有学过的东西。如果有办法用数组做到这一点,我也不介意尝试。

【问题讨论】:

  • 课程 employeemanager 是否存在?
  • 确实有,但我认为最好只发布与向量直接交互的那个,而不是发布 200 多行代码。这些类工作正常,只是在我尝试在 Finance 中添加对象存储时才崩溃。
  • 好吧,你也不应该发布超过 200 行代码。您应该将代码减少到重现问题所需的最少行数。见stackoverflow.com/help/mcve
  • 嗯,这就是我在这里所做的,不是吗? add manager 函数尝试将对象添加到 Finance 内部的数组中。除了我包含的三个部分,我还能删减或添加什么?
  • 废话。 stackoverflow.com/help/mcve 中清楚地解释了替代方案。

标签: c++ arrays class object vector


【解决方案1】:

好的,你需要在类声明中保留vManagers

//finance.h file
#ifndef FINANCE
#define FINANCE
#include "freight.h" //assuming you have defined manager class here

class finance
{
    public:
        finance();
        ~finance();
        void add_manager();
    private:
        vector<manager*> vManagers;
};

#endif // FINANCE
//finance.cpp file

#include "finance.h"
using namespace std;

finance::finance()
{

}

finance::~finance()
{
    for(int i=0; i< vManagers.size(); i++)
    {
        if(vManagers[i] != NULL)
        {
            delete vManagers[i];
        }
    }
}

finance::add_manager()
{
    string name;
    name = get_string_input("Please input the name of the employee.");
    vManagers.push_back(new manager(name)); //second problem line
    while(ask_employee()
    {
       name = get_string_input("Please input the name of the employee.");
       vManagers.push_back(new manager(name)); //second problem line
    }
}

现在您可以在 main.cpp 中创建和使用财务对象

【讨论】:

  • 好吧,这更有意义。我不确定 while 循环方法是否会起作用,因为 manager 是员工的子类,并且存在另外两个子类。我已对其进行了更改,以便该向量属于员工类型并称为员工。我可以在 OP 中的 main 中使用相同的格式,而只需更改正在制作/添加的对象的类型吗?
  • 是的,您可以使用员工而不是经理,但如果经理是员工类型并且您有其他员工类型,您可以只使用枚举成员作为员工类型,并且您不必定义所有员工子类的新类。
  • 仍然抛出一堆错误。似乎员工类型的向量存在问题。正如上面在 cmets 中提到的,我无法真正粘贴整个代码,但无论如何感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-15
  • 1970-01-01
  • 2020-07-23
  • 2018-10-04
  • 2012-03-07
  • 1970-01-01
  • 2022-11-21
相关资源
最近更新 更多