2013-05-12 29 views
1

在struct的矩阵内初始化一个对象实例的正确方法是什么?在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

这些只是警告。该错误表示您需要在文件顶部添加'#include '。 – 2013-05-12 05:04:29

回答

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编译。

+0

我没有使用列表,我不允许使用这个编译选项“std = C++ 0x” – ealch 2013-05-12 05:32:43

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)))); 

这些选项都不是理想的,这就是为什么统一初始化加入的语言。你应该试图说服谁禁止你使用现代语言来放松和接受它的好处。

相关问题