2017-10-07 131 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的上面定義中刪除零,你的程序就可以正常運行。