在我的代碼的工作,我有函數原型C++智能指針
void AddBenchNode(ref_ptr<Group> root ,ref_ptr<Node> benches, bool setAttitude = false, float scale_x =.15, float scale_y =15, float scale_z = 15, int position_x = 250, int position_y = 100, int position_z =0);
其中ref_ptr是一個智能指針。
在我的主函數中,我定義了2個類型爲ref_ptr和ref_ptr的智能指針,並將它們傳遞給我的函數AddBenchNode的調用。
ref_ptr<Group> root = new Group();
ref_ptr<Node> benches = readNodeFile("Models/test.ive");
AddBenchNode(root, benches, true);
當呼叫執行時,什麼也沒有發生。因爲沒有對根指針進行更改。我想知道的是,如果我按照我的要求正確地撥打此電話?或者我是否必須重新定義我的功能來指向這些智能指針?
現在我也嘗試通過引用傳遞
void AddBenchNode(osg::ref_ptr<osg::Group>& root ,osg::ref_ptr<osg::Node>& benches, bool setAttitude = false, float scale_x =.15, float scale_y =15, float scale_z = 15, int position_x = 250, int position_y = 100, int position_z =0);
這導致一些鏈接錯誤。
錯誤2錯誤LNK2001:解析外部符號 「空隙__cdecl AddBenchNode(類OSG :: ref_ptr &,類OSG :: ref_ptr &,布爾,浮動,浮動,浮動,INT,INT,INT)」(AddBenchNode? ?@@ YAXAAV $ @ ref_ptr @ VGroup OSG @@@ OSG @@ AAV $ @ ref_ptr @ v節點OSG @@@ 2 @ _NMMMHHH @ Z) 錯誤3錯誤LNK1120:1周無法解析的外部
函數內部會發生什麼? – tmpearce 2012-07-05 15:24:34
考慮到ref_ptr似乎不是標準C++庫的一部分,也許你會告訴我們你正在使用哪個庫?如果您可以提供一個簡單的,自包含的示例,它將編譯並運行以展示您所看到的問題,這也非常有幫助。 – Rook 2012-07-05 15:24:47
你爲什麼期望'root'指針改變?它看起來更像是應該對它指向的「Group」做些什麼,而不是指針本身。 (但是如果它應該改變它的參數,那麼它將需要通過引用或指針來引用該參數,正如你所說的那樣)。 – 2012-07-05 15:28:40