我已經定義了以下的boost ::變種類型:爲什麼我的結構沒有boost :: variant類型的成員,但可以有vector <boost :: variant>類型的成員?
#include <boost/variant.hpp>
#include <vector>
#include <string>
struct SharedNodeType;
typedef float TypeA;
typedef int TypeB;
typedef std::string TypeC;
typedef char* TypeD;
typedef boost::variant
<TypeA, TypeB, TypeC, TypeD, SharedNodeType> BaseNodeType;
凡類型A,類型B,TypeC,和類型是完全合格的,完整的類型(確切類型是不相關的,但在這種情況下,他們是其他結構)。
而且我已經定義了以下結構:
struct SharedNodeType
{
std::string nodeName;
BaseNodeType node;
};
然而,正如上面寫不會編譯,給人錯誤的頁面(太多太多,包括在這裏)的結構,主要是涉及到「不完整鍵入不允許。「
的第一個編譯器錯誤是:
In file included from ./apps/iv_parserTest.cc(1):
/opt/common/boost/1.50.py2.7/include/boost/mpl/sizeof.hpp(27): error: incomplete type is not allowed
: mpl::size_t< sizeof(T)>
但,如果我改變了結構的下面,它編譯沒有問題:
struct SharedNodeType {
std::string nodeName;
std::vector<BaseNodeType> node;
};
由於我SharedNodeType
將永遠不會有不止一個節點,這對我來說似乎很浪費。
爲什麼結構的第二種形式會編譯,但第一種形式不會?
編輯: 經過一番試驗後,我確定問題似乎在於BaseNodeType變體類型也包含SharedNodeType。我相應地更新了我的代碼示例,但它仍然留下了爲什麼編譯器能夠解析這些類型(如果它們在std::vector
之內但不是其他方式)的問題。
顯示[MCVE]請。 –
當您執行'BaseNodeType節點;'時,'TypeA,TypeB,TypeC,TypeD'是否已知? – NathanOliver
什麼是引發的實際編譯器錯誤? –