C ++函数重载导致段错误

时间:2018-10-08 00:56:03

标签: c++ segmentation-fault

我有一个名为Set的结构。

struct Set {
string name;
string value;
bool is_condition;
bool is_bool_val; };

我必须存储许多这些“集合”结构,所以我正在使用向量。

vector<Set> list;

就上下文而言,我正在存储有关移动设备(如iPhone)的数据。 Set的列表描述了一种设备!例如,set的实例可能具有以下内容……

Set phone;
phone.name = "Serial Number";
phone.value = "FLMJ0000GGGG";
phone.is_condition = false;
phone.is_bool = false;

is_condition,告诉我Set的此实例需要存储“ Good”或“ Bad”作为值。 is_bool,告诉我Set的实例需要存储一个布尔值。请参见下面的示例。

Set device_wiped;
device_wiped.name = "Device Wiped";
device_wiped.is_bool = true;

从is_bool推算,我可以输入true或false,这意味着该设备已被擦除或未被擦除(恢复为出厂设置)。

我正在使用名为new_set的重载包装函数来创建我的Set元素,这些元素存储在我的“列表”向量中。

Set new_set(string name, const bool is_bool, const bool is_condition) {
    Set set;
    set.name = name;
    set.is_bool = is_bool;
    set.is_condition = is_condition;
    return set;
}

Set new_set(string name, const bool is_bool) {
    return new_set(name, is_bool);
}

Set new_set(string name) {
    return new_set(name, false, false);
}

我有三个包装函数,因为这使实现起来更容易(我只想在必要时编写参数!)。这样编译可以,但是我不能运行。分段错误崩溃。让我知道您是否需要完整的代码。

现在我不需要将数据存储在Set.value或Set.condition字段中。我只想用布尔值来初始化它们。

1 个答案:

答案 0 :(得分:4)

问题出在第二个功能上:

Set new_set(string name, const bool is_bool) {
    return new_set(name, is_bool);
}

这里无限递归。我猜你是说return new_set(name, is_bool, false);return new_set(name, is_bool, true);

顺便说一下,您的三个功能可以简化为一个(如下所示)(如@SirGuy所述):

Set new_set(string name, const bool is_bool = false, const bool is_condition = false) {
    Set set;
    set.name = name;
    set.is_bool_val = is_bool;
    set.is_condition = is_condition;
    return set;
}