1

在结构矩阵中初始化对象实例的正确方法是什么?

我的构造函数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>

这是我的代码..

直径cpp

horario_funcionarios = vector_horario_funcionarios (numero_funcionarios, 
  vector_horario(numero_horas, {true, Cita(0,0)}) );

直径.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; 
    } 
    .
    .
4

2 回答 2

1

在 C++98 中,不支持 initializer_list ,即不能使用 list 初始化向量或其他容器{..}

horario_funcionarios = vector_horario_funcionarios (numero_funcionarios, 
  vector_horario(numero_horas, {true, Cita(0,0)}) );

如前所述g++,添加#include <initializer_list>和编译-std=c++0x.

于 2013-05-12T05:06:13.940 回答
0

<initializer_list>正如编译器所说,初始化临时 POD 类的正确方法是启用 C++11 支持和 include 。但是您说由于某种原因不允许使用现代 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))) );

这些选项都不是理想的,这就是为什么将统一初始化添加到语言中。你应该说服任何禁止你使用现代语言的人放松并接受它的好处。

于 2013-05-12T11:33:06.153 回答