當我試圖利用pimpl-idiom和智能指針來實現我自己的包裝平臺特定的GUI組件時,我遇到了一個我無法解決的問題。問題可能是pimpl-idiom和* unique_ptr *,因爲我不知道還有什麼可能是錯誤的。所有的錯誤似乎都是鏈接錯誤。我得到了各種各樣的未定義引用錯誤,同時使用的代碼(下面的鏈接): http://www.cplusplus.com/forum/general/96020/C++ 11 - 可能pimpl-idiom和unique_ptr的困境?
這是錯誤的清單:
> obj\debug_windows\helixirrwidgets\src\helixirrwidgets\Window-windows.o||In
> function `Window':|
> E:\new2\projects\programming\test2\test2\..\..\helixirrwidgets\src\helixirrwidgets\Window.hpp|15|undefined
> reference to
> `HelixirrWidgets::PointerSmartSafe<HelixirrWidgets::Window::Helper,
> std::default_delete<HelixirrWidgets::Window::Helper>
> >::PointerSmartSafe(HelixirrWidgets::Window::Helper*)'| E:\new2\projects\programming\test2\test2\..\..\helixirrwidgets\src\helixirrwidgets\Window.hpp|15|undefined
> reference to
> `HelixirrWidgets::PointerSmartSafe<HelixirrWidgets::Window::Helper,
> std::default_delete<HelixirrWidgets::Window::Helper>
> >::PointerSmartSafe(HelixirrWidgets::PointerSmartSafe<HelixirrWidgets::Window::Helper,
> std::default_delete<HelixirrWidgets::Window::Helper> > const&)'|
> obj\debug_windows\helixirrwidgets\src\helixirrwidgets\Window-windows.o||In
> function `Window':|
> E:\new2\projects\programming\helixirrwidgets\src\helixirrwidgets\Window-windows.cpp|88|undefined
> reference to
> `HelixirrWidgets::PointerSmartSafe<HelixirrWidgets::Window::Helper,
> std::default_delete<HelixirrWidgets::Window::Helper>
> >::PointerSmartSafe(HelixirrWidgets::Window::Helper*)'| E:\new2\projects\programming\helixirrwidgets\src\helixirrwidgets\Window-windows.cpp|91|undefined
> reference to
> `HelixirrWidgets::PointerSmartSafe<HelixirrWidgets::Window::Helper,
> std::default_delete<HelixirrWidgets::Window::Helper>
> >::PointerSmartSafe(HelixirrWidgets::Window::Helper*)'| obj\debug_windows\helixirrwidgets\src\helixirrwidgets\Window-windows.o||In
> function `ZN15HelixirrWidgets6Window12save_changesEv':|
> E:\new2\projects\programming\helixirrwidgets\src\helixirrwidgets\Window-windows.cpp|98|undefined
> reference to
> `HelixirrWidgets::PointerSmartSafe<HelixirrWidgets::Window::Helper,
> std::default_delete<HelixirrWidgets::Window::Helper> >::operator->()
> const'|
> E:\new2\projects\programming\helixirrwidgets\src\helixirrwidgets\Window-windows.cpp|100|undefined
> reference to
> `HelixirrWidgets::PointerSmartSafe<HelixirrWidgets::Window::Helper,
> std::default_delete<HelixirrWidgets::Window::Helper> >::operator->()
> const'|
> E:\new2\projects\programming\helixirrwidgets\src\helixirrwidgets\Window-windows.cpp|101|undefined
> reference to
> `HelixirrWidgets::PointerSmartSafe<HelixirrWidgets::Window::Helper,
> std::default_delete<HelixirrWidgets::Window::Helper> >::operator->()
> const'|
> E:\new2\projects\programming\helixirrwidgets\src\helixirrwidgets\Window-windows.cpp|106|undefined
> reference to
> `HelixirrWidgets::PointerSmartSafe<HelixirrWidgets::Window::Helper,
> std::default_delete<HelixirrWidgets::Window::Helper> >::operator->()
> const'|
> E:\new2\projects\programming\helixirrwidgets\src\helixirrwidgets\Window-windows.cpp|107|undefined
> reference to
> `HelixirrWidgets::PointerSmartSafe<HelixirrWidgets::Window::Helper,
> std::default_delete<HelixirrWidgets::Window::Helper> >::operator->()
> const'|
> E:\new2\projects\programming\helixirrwidgets\src\helixirrwidgets\Window-windows.cpp|109|undefined
> reference to `[email protected]'|
> E:\new2\projects\programming\helixirrwidgets\src\helixirrwidgets\Window-windows.cpp|111|undefined
> reference to
> `HelixirrWidgets::PointerSmartSafe<HelixirrWidgets::Window::Helper,
> std::default_delete<HelixirrWidgets::Window::Helper> >::operator->()
> const'|
> E:\new2\projects\programming\helixirrwidgets\src\helixirrwidgets\Window-windows.cpp|112|undefined
> reference to
> `HelixirrWidgets::PointerSmartSafe<HelixirrWidgets::Window::Helper,
> std::default_delete<HelixirrWidgets::Window::Helper> >::operator->()
> const'|
> E:\new2\projects\programming\helixirrwidgets\src\helixirrwidgets\Window-windows.cpp|114|undefined
> reference to
> `HelixirrWidgets::PointerSmartSafe<HelixirrWidgets::Window::Helper,
> std::default_delete<HelixirrWidgets::Window::Helper> >::operator->()
> const'|
> E:\new2\projects\programming\helixirrwidgets\src\helixirrwidgets\Window-windows.cpp|118|undefined
> reference to
> `HelixirrWidgets::PointerSmartSafe<HelixirrWidgets::Window::Helper,
> std::default_delete<HelixirrWidgets::Window::Helper> >::operator->()
> const'|
> E:\new2\projects\programming\helixirrwidgets\src\helixirrwidgets\Window-windows.cpp|119|undefined
> reference to
> `HelixirrWidgets::PointerSmartSafe<HelixirrWidgets::Window::Helper,
> std::default_delete<HelixirrWidgets::Window::Helper> >::operator->()
> const'|
> obj\debug_windows\helixirrwidgets\src\helixirrwidgets\Window-windows.o:E:\new2\projects\programming\helixirrwidgets\src\helixirrwidgets\Window-windows.cpp|120|more
> undefined references to
> `HelixirrWidgets::PointerSmartSafe<HelixirrWidgets::Window::Helper,
> std::default_delete<HelixirrWidgets::Window::Helper> >::operator->()
> const' follow| ||=== Build finished: 16 errors, 0 warnings ===|
我怎樣才能解決這個問題?
非常感謝你,安迪!問題解決了。有趣的是,這樣一個小小的錯誤會導致如此多的頭痛!你的名字將被放入源代碼中以幫助我。上帝祝福你。 – Helixirr 2013-03-17 16:36:19
@Helixirr:不客氣,對你的項目感到高興和幫助;)(你可以把我的名字留出,不用擔心:D) – 2013-03-17 16:37:54
我很開心,當你在。 :) – Helixirr 2013-03-17 16:42:10