在struct的矩阵中初始化对象实例的正确方法是什么?
我的构造函数Cita(int, int)
需要两个参数来创建一个新实例,但是当我编译程序时,我的shell告诉我必须使用-std=c++0x or -std=gnu++0x
进行编译,但我不允许这样做。这是错误..
Dia.cpp: In constructor ‘Dia::Dia(int, int, int)’:
Dia.cpp:9:56: warning: extended initializer lists only available with -std=c++0x or -std=gnu++0x [enabled by default]
Dia.cpp:9:75: warning: extended initializer lists only available with -std=c++0x or -std=gnu++0x [enabled by default]
Dia.cpp:9:75: error: deducing from brace-enclosed initializer list requires #include <initializer_list>
这是我的代码..
Dia.cpp
horario_funcionarios = vector_horario_funcionarios (numero_funcionarios,
vector_horario(numero_horas, {true, Cita(0,0)}) );
Dia.hpp
struct hora_dia {
bool habil;
Cita cita;
};
typedef vector<hora_dia> vector_horario;
typedef vector<vector_horario> vector_horario_funcionarios;
class Dia {
private:
int id;
vector_horario_funcionarios horario_funcionarios;
.
.
.
Cita.cpp
Cita::Cita(int id, int nivel) {
this->id = id;
this->nivel = nivel;
}
.
.
答案 0 :(得分:1)
在C ++ 98中,不支持initializer_list,即无法使用列表{..}
初始化向量或其他容器。
horario_funcionarios = vector_horario_funcionarios (numero_funcionarios,
vector_horario(numero_horas, {true, Cita(0,0)}) );
如g++
所述,添加#include <initializer_list>
并使用-std=c++0x
进行编译。
答案 1 :(得分:0)
初始化临时POD类的正确方法是启用C ++ 11支持并包含<initializer_list>
,正如编译器所说。但是你说你出于某种原因不允许使用现代C ++,所以你必须这么做。
一种可能性是给hora_dia
一个构造函数:
struct hora_dia {
hora_dia(bool habil, Cita cita) : habil(habil), cita(cita) {}
//...
};
horario_funcionarios = vector_horario_funcionarios (numero_funcionarios,
vector_horario(numero_horas, hora_dia(true, Cita(0,0))) );
或者可能是默认构造函数,如果有意义的话:
struct hora_dia {
hora_dia() : habil(true), cita(0,0) {}
//...
};
horario_funcionarios = vector_horario_funcionarios (numero_funcionarios,
vector_horario(numero_horas) );
然而,这意味着结构不再是POD,这可能是你想要的东西。在这种情况下,您可以使用临时对象:
hora_dia hd = {false, Cita(0,0)};
horario_funcionarios = vector_horario_funcionarios (numero_funcionarios,
vector_horario(numero_horas, hd) );
或工厂功能:
hora_dia make_hora_dia(bool habil, Cita cita) {
hora_dia hd = {habil, cita};
}
horario_funcionarios = vector_horario_funcionarios (numero_funcionarios,
vector_horario(numero_horas, make_hora_dia(true, Cita(0,0))) );
这些选项都不是理想选择,这就是为语言添加统一初始化的原因。你应该试着说服那些禁止你使用现代语言来放松和接受其好处的人。