无法从“初始化列表”转换

新手上路,请多包涵

我是新手,在 C++ 中有问题。我正在创建 3D 坐标(面部每个角的 x、y 和 z,然后是 6 个面)并收到许多错误。这是我的代码:

 #include <vector>
int main()
{
    std::vector<int> xyzCoords = {
    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
    };

    int x1 = 0;
    int y1 = 1;
    int z1 = 2;
    int x2 = 3;
    int y2 = 4;
    int z2 = 5;

    xyzCoords = {
    { x1, y1, z1, x2, y1, z1, x2, y1, z2, x1, y1, z2 },
    { x1, y2, z1, x2, y2, z1, x2, y2, z2, x1, y2, z2 },
    { x1, y2, z1, x1, y1, z1, x1, y1, z2, x1, y2, z2 },
    { x2, y2, z1, x2, y1, z1, x2, y1, z2, x2, y2, z2 },
    { x1, y2, z2, x1, y1, z2, x2, y1, z2, x2, y2, z2 },
    { x1, y2, z1, x1, y1, z1, x2, y1, z1, x2, y2, z1 }
    };
    return 0;
}

这是发生问题的代码。您可以看到我将 xyzCoords 定义为向量。我不确定这是否是正确的方法。我也不想单独定义 xyz123 。实现这一目标的最佳方法是什么?我应该使用列表、数组还是向量?请编写代码以了解如何执行此操作。谢谢!错误:

E0289: 没有构造函数实例 “std::vector<_Ty, _Alloc>::vector [with _Ty=int, _Alloc=std::allocator]” 与参数列表匹配

E0349: 没有运算符“=”匹配这些操作数

C2440:“正在初始化”:无法从“初始化程序列表”转换为“std::vector>”

C2679:二进制“=”:未找到采用“初始化列表”类型的右侧操作数的运算符(或没有可接受的转换)

原文由 George_E -old 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 931
2 个回答

您的初始化与您声明的类型不匹配。您声明一维数组,而您的初始化是二维数组。

 std::vector<int> xyzCoords = {
    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
};

它应该是 :

 std::vector<std::vector<int>> xyzCoords = {
    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
};

你提到了 xyz 坐标,那你为什么不做一个专门用于坐标的类,例如:

 struct Point {
   int x, y, z;
};

无论如何,我不建议您对这个问题使用幼稚的方法,因为这将是矩阵运算密集型计算。您应该使用 BLAS / LAPACK 库或它的包装器,如 EigenArmadillo 。他们肯定要快得多。

原文由 Tirtadwipa Manunggal 发布,翻译遵循 CC BY-SA 3.0 许可协议

也许您应该将代码重组为这样的东西,以提高可见性和更好的理解:

 #include <vector>

int main()
{
    struct Corner
    {
        int x;
        int y;
        int z;
        Corner(int x, int y, int z) :
            x(x), y(y), z(z) {}
    };

    struct Face
    {
        Corner c1;
        Corner c2;
        Corner c3;
        Corner c4;
        Face(Corner c1, Corner c2, Corner c3, Corner c4) :
            c1(c1), c2(c2), c3(c3), c4(c4) {}
    };

    Corner c1(0, 1, 2);
    Corner c2(3, 4, 5);
    Face f1(c1, c2, c1, c2);

    std::vector<Face> faces = { f1, f1, f1, f1, f1, f1 };

    return 0;
}

这将创建 6 个面的数组,其角坐标为 (x1,y1,z1) (x2,y2,z2) (x1,y1,z1) (x2,y2,z2)

原文由 Killzone Kid 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题