2014-04-16 20 views
1

我是新來提升,我試圖對有向圖使用isomorphism.hpp文件。可能未初始化的本地指針變量'v'用於助推isomorphism.hpp

試圖運行的代碼,在升壓庫文件我看到的錯誤

1> C:\ boost_1_55_0 \升壓\圖表\ isomorphism.hpp(142):錯誤C4703:潛在的未初始化局部指針變量 'v' 用來

1> C:\ boost_1_55_0 \升壓\圖表\ isomorphism.hpp(147):錯誤C4703:潛在的未初始化的局部指針變量 'v' 用來

它被從這裏拋出,

BGL_FORALL_VERTICES_T(v, G1, Graph1){ 

    f[v] = graph_traits<Graph2>::null_vertex(); //error thrown here 
} 

這在升壓/圖表/ iteration_macros.hpp定義如下所示:

#define BGL_FORALL_VERTICES_T(VNAME, GNAME, GraphType) \ 
for (std::pair<typename boost::graph_traits<GraphType>::vertex_iterator, \ 
       typename boost::graph_traits<GraphType>::vertex_iterator> BGL_RANGE(__LINE__) = vertices(GNAME); \ 
    BGL_FIRST(__LINE__) != BGL_LAST(__LINE__); BGL_FIRST(__LINE__) = BGL_LAST(__LINE__)) \ 
    for (typename boost::graph_traits<GraphType>::vertex_descriptor VNAME; \ 
    BGL_FIRST(__LINE__) != BGL_LAST(__LINE__) ? (VNAME = *BGL_FIRST(__LINE__), true):false; \ 
    ++BGL_FIRST(__LINE__)) 

在哪裏,我們需要定義嗎?這是一個已知的問題?

回答

0

1> C:\ boost_1_55_0 \升壓\圖表\ isomorphism.hpp(142):錯誤C4703:潛在的未初始化的局部指針變量 'V' 用來

鑑於...

BGL_FORALL_VERTICES_T(v, G1, Graph1) 

......還有......

#define BGL_FORALL_VERTICES_T(VNAME, GNAME, GraphType) 

...我們知道v被稱爲VNAME的米以內ACRO。

在外環的條件是:

BGL_FIRST(__LINE__) != BGL_LAST(__LINE__) 

在內環的條件是:

BGL_FIRST(__LINE__) != BGL_LAST(__LINE__) ? (VNAME = *BGL_FIRST(__LINE__), true):false; 

鑑於內環不運行,除非所述外循環條件被滿足時,我們可以簡化:

true          ? (VNAME = *BGL_FIRST(__LINE__), true):false; 

              (VNAME = *BGL_FIRST(__LINE__), true)  ; 

顯然VNAME總是被分配到與從未使用過uninitialis編輯。你的編譯器的分析是有缺陷的,你應該禁用這個警告(如果可能的話,只針對這個特定的代碼),否則關閉任何treat-warnings-as-errors編譯器選項,這樣你的編譯不會完全中斷或者嘗試另一個編譯器。