2017-10-07 152 views
1

所以我有一个问题,我一直在争取几个小时。这里有各种各样的抱怨同样的问题,但没有解决方案,为我的工作在做题..嵌套结构初始化

我有2层结构

​​

我要振作initialze他们是这样的:

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大括号初始化器就可以与结构一起工作。

我使用C++ 11与gcc 7.3。

任何帮助表示赞赏。

这是一个在线演示的链接问题:

https://onlinegdb.com/HkKzwoLhb

+0

@VittorioRomeo不,我想创建一个具有6个JointPosition的JointPositions。 –

+0

@Someprogrammerdude我添加了一个指向onlinegdb的链接,显示问题 –

+3

您提供的链接仅说“C++”,而不是例如。 “C++ 14”。这通常意味着它是C++ 03。但是,如果你删除'JointPosition'中的内联初始化,它应该没问题,并且应该编译没有错误(自C++发明以来,并且在C之前已经完成了)。 –

回答

1

问题是你用C++版本。

在这Live Demo,我可以重现您的问题与GCC 7.2.0和C + + 11。

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

+1

是的C++ 14确实解决了这个问题。 –

0

我认为这是因为您已经在结构中将“JointPosition”值定义为“0”。如果你删除它们,它会完成。

0

你已经在

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

所有成员已经被初始化定义初始化两个数据成员为零。

如果你想在声明后初始化它们,那么只需从struct JointPosition的上面定义中删除零,你的程序就可以正常运行。