对象构造函数调用未在此范围内声明

Object Constructor Call Not Declared In This Scope

本文关键字:范围内 声明 函数调用 对象      更新时间:2023-10-16

我通过将 part_time.h 的 #include 移动到 #include 列表的顶部,自己设法解决了这个问题。为什么这会有所作为,我不知道。

程序拆分为 makefile 后,我在一次手动对象构造调用时遇到问题。每个.cpp都有一个包含的.h,main.cpp也包括每个.h。

相关代码如下。错误是:

main.cpp: 在函数 'void add_part_time((' 中: main.cpp:166:2:错误:"part_time"未在此范围内声明 part_time part_time1(名称、叉车、annual_leave、sick_leave(; ^

主.cpp:166:12:错误:在"part_time1"之前应为";" part_time part_time1(名称、叉车、annual_leave、sick_leave(;

我注意到了一些奇怪的事情。如果我删除 ;在sick_leave定义行之后,我得到的唯一错误是询问缺失的错误;另一个错误消失了。

#include <string>
using namespace std;
class employee
{
    public:
        static int count;
        employee (std::string name);
        string name;
        ~employee();
};
employee::employee (string set_name) 
{
    name = set_name;
}
employee::~employee()
{
}
class dockhand: public employee
{
    public:
        dockhand (string set_name, bool set_forklift);
        float start_shift;
        bool forklift;
        float payrate;
        ~dockhand();
};
dockhand::dockhand (string set_name, bool set_forklift) : employee (set_name)
{
    forklift = set_forklift;
    start_shift = 4.00;
}
dockhand::~dockhand()
{
}
class part_time: public dockhand
{
    public:
        part_time (string set_name, bool set_forklift, int annual_leave, int sick_leave);
        float end_shift;
        int annual_leave;
        int sick_leave;
        ~part_time();
};
part_time::part_time (string set_name, bool set_forklift, int annual_leave, int sick_leave) : dockhand (set_name, set_forklift)
{
    end_shift = 8.00;
    payrate = 22.00;
}
part_time::~part_time()
{
}
void add_part_time()
{
    string name;
    bool forklift;
    int annual_leave;
    int sick_leave;
    name = "bob";
    forklift = true;
    annual_leave = 2;
    sick_leave = 3;
    part_time part_time1(name, forklift, annual_leave, sick_leave);
}

然而,完全相同的格式在下面与另一个类一起编译得很好。

void add_casual()
{
    string name;
    bool forklift;
    name = "bob";
    forklift = true;
    casual casual1(name, forklift);
}

我被困在问题所在。注释掉构造行使其编译,因此它肯定是那里的东西。

编辑 将part_time part_time1(名称、叉车、annual_leave、sick_leave(行更改为临时构造函数调用,使其可以使用生成文件进行编译。因此,即使包含是正确的,该特定行仍然存在问题。

我通过将 part_time.h 的 #include 移动到 #include 列表的顶部,自己设法解决了这个问题。绝对没有其他改变。为什么这会有所作为,我不知道。