es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Error con initializer_list<>>

Quiero inicializar mi propia clase de la siguiente manera:

c++
vector<point3f>={{1f,2f,3f},{2f,3f,1f},{2f,2f,2f}};

Pero se muestra un error:

No se puede convertir “lista de inicialización” a “std::vector<>>”…

Quiero saber cuál es la forma correcta de inicializar mi propia clase con listas entre llaves.

Este es mi código:

“`c++
#pragma once
#ifndef POINT_HPP
#define POINT_HPP

#include<initializer_list>

namespace LB
{
using namespace std;

<pre><code>template< typename T,unsigned length>
class Point
{
T data[length];
public:
Point(){}
Point(const initializer_list<t>& t)
{
int min = t.size() < length ? t.size() : length;
int i = 0;
for (auto& each : t)
{
if (i >= min)
break;
data[i] = each;
i++;
}
}
Point(Point<t, length="">& other)
{
for (int i = 0; i < length; i++)
{
data[i] = other[i];
}
}
</code></pre>

/*
other operation function
*/
};

<pre><code>using Point2i = Point<int, 2="">;
using Point2f = Point<float, 2="">;
using Point2d = Point<double, 2="">;
using Point3i = Point<int, 3="">;
using Point3f = Point<float, 3="">;
using Point3d = Point<double, 3="">;
using Point4i = Point<int, 4="">;
using Point4f = Point<float, 4="">;
using Point4d = Point<double, 4="">;
</code></pre>

}

#endif
“`</double,></float,></int,></double,></float,></int,></double,></float,></int,></t,>

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para inicializar su propia clase usando listas entre llaves, es necesario definir un constructor en su clase que tome una lista inicializadora como parámetro. Este constructor debe recorrer los elementos de la lista y asignarlos a las variables miembro correspondientes. En su caso, ya ha escrito un constructor que toma una lista inicializadora como parámetro, por lo que puede utilizarlo para inicializar su clase Point.

    Para inicializar un vector de objetos Point3f, puede utilizar la misma sintaxis que el código de ejemplo que proporcionó, de la siguiente manera:

    c++
    vector<lb::point3f> points = {{1.0f, 2.0f, 3.0f}, {2.0f, 3.0f, 1.0f}, {2.0f, 2.0f, 2.0f}};

    Esto debería funcionar siempre que haya incluido las cabeceras necesarias y haya definido correctamente la clase LB::Point3f.

Comments are closed.