Open drosselot opened 3 months ago
Record recibe un rvalue reference en el constructor. El concepto de rvalue en c++ es algo dificil de explicar en simple pero si de verdad les interesa lo pueden buscar en internet.
Para que funcione tienes que forzar una copia del vector y moverlo:
auto datatypes = schema.datatypes;
Record record(std::move(datatypes));
Otra alternativa es cambiar o sobrecargar el constructor de Record para que reciba un lvalue reference
// src/relational_model/record.cc
Record::Record(const std::vector<DataType>& types) :
types (types)
{
for (auto type : types) {
switch (type) {
case DataType::INT: {
values.push_back(OutValue((int64_t) 0));
break;
}
case DataType::STR: {
char* str_buffer = new char[MAX_STRLEN+1];
std::memset(str_buffer, '\0', MAX_STRLEN+1);
values.push_back(OutValue(str_buffer));
break;
}
}
}
}
de esa forma podrias hacer directamente
Record record(schema.datatypes);
Perfecto! Justo encontré la primera solución y me sirvió, gracias!
Hola! Intento crear un nuevo record con los nuevos cambios, pero tengo problema al instanciarlos sin hardcodearlos. En los ejemplos utilizan:
Record record_buf({DataType::STR, DataType::INT});
. Por lo que supuse que para instanciarlo con los valores del schema, se debía hacer algo del estilo:Record record_buf(schema.types);
, pero no funciona. He intentado de varias formas y ninguna me funciona, ¿cuál sería la forma correcta de hacerlo?