所以我有一个问题要解决几个小时。关于SO的问题有很多,抱怨同样的问题,但是没有解决方案对我有用。

我有2个结构

// \brief The state of a single joint position. Default value of the speed is the maximum it wil allow.
struct JointPosition
{
    /// \brief The degree to set the joint to.
    double degree = 0;
    /// \brief The max degrees per second it will allow during the move.
    double maxDegreesPerSecond = 0;
};

/// \brief Struct containing all joint positions as degrees.
struct JointPositions
{
    JointPosition base;
    JointPosition shoulder;
    JointPosition elbow;
    JointPosition wrist;
    JointPosition gripper;
    JointPosition wristRotate;
};

我想像这样初始化它们:
static const JointPositions pos = {
    {0, 0},
    {0, 0},
    {0, 0},
    {0, 0},
    {0, 0},
    {0, 0}
};

return pos;

但是当我这样做时,我的编译器会抱怨以下错误:
RobotArm.cpp:59:2: error: could not convert ‘{0, 0}’ from ‘<brace-enclosed initializer list>’ to ‘JointPosition’

只要Afaik括号初始化程序没有构造函数,它们就可以使用它们。

我在gcc 7.3中使用c++ 11。

任何帮助表示赞赏。

这是一个在线链接,演示了此问题:

https://onlinegdb.com/HkKzwoLhb

最佳答案

问题是您使用的C++版本。

在此Live Demo中,我可以重现GCC 7.2.0和C++ 11的问题。

切换到C++ 14可立即修复错误。

10-05 19:49