I have managed to solve this myself by moving the #include for part_time.h to the top of the #include list. Why this made a difference, I have no idea.对象构造函数调用未声明在此范围内
我有我的分裂程序转换成一个makefile后一个手动对象构建呼叫的问题。每个.cpp都有一个包含它的.h,main.cpp也包含每个.h。
相关代码如下。错误是:
main.cpp: In function ‘void add_part_time()’: main.cpp:166:2: error: ‘part_time’ was not declared in this scope part_time part_time1(name, forklift, annual_leave, sick_leave); ^
main.cpp:166:12: error: expected ‘;’ before ‘part_time1’ part_time part_time1(name, forklift, 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(name,forklift,annual_leave,sick_leave);行到随便的构造函数调用使它与一个makefile很好地编译。所以即使包含正确,该特定行仍然有问题。
[MCVE](http://stackoverflow.com/help/mcve)会真的有所帮助。我得到[完全不同的错误](http://coliru.stacked-crooked.com/a/f201f8e68c9e4b8d)。 – chris
在附注上,我认为最好使用以大写字母开头的类名。例如,'class Part_time:public Dockhand'。它使代码更具可读性,特别是当你的函数的名字与返回类型相匹配时,比如'part_time part_time1(name,forklift,annual_leave,sick_leave);' –
好吧,我只是把它全部合并到了一块代码中,好,但我的生成文件设置仍然给我上面的错误。你有什么想法为什么会发生? –