2011-04-21 11 views
11

के तहत संकलित नहीं कर रहा है मुझे विंडोज़ और लिनक्स (और फ़ाइलों को बीच में स्थानांतरित करने) पर डेटा को क्रमबद्ध करने की आवश्यकता है। मैं बूस्ट की धारावाहिक पुस्तकालय के पोर्टेबल बाइनरी अभिलेखागार का उपयोग करना चाहता था जो उदाहरणों में पाया जा सकता है, उदाहरण के लिए देखें। http://boost-doc-zh.googlecode.com/svn-history/r380/trunk/libs/serialization/example/पोर्टेबल संग्रह जीसीसी

यह विंडोज (वीएस 2008) पर ठीक काम करता है लेकिन निम्नलिखित त्रुटियों के साथ जीसीसी 4.3.2 के तहत संकलित करने में विफल रहता है।

क्या कोई समाधान का सुझाव दे सकता है?

बहुत बहुत धन्यवाद!

/projects/lib/BOOST/1_44_0/include/boost/archive/basic_archive.hpp: In member function 'void portable_binary_iarchive::init(unsigned int)': 
/projects/lib/BOOST/1_44_0/include/boost/archive/basic_archive.hpp:78: error: 'uint_least32_t boost::archive::version_type::t' is private 
/home/myfolder/src/portable_binary_iarchive.cpp:92: error: within this context 
/home/myfolder/src/portable_binary_iarchive.hpp: In member function 'void portable_binary_iarchive::load(T&) [with T = boost::archive::class_id_type]': 
/projects/lib/BOOST/1_44_0/include/boost/archive/detail/iserializer.hpp:107: instantiated from 'static void boost::archive::load_access::load_primitive(Archive&, T&) [with Archive = portable_binary_iarchive, T = boost::archive::class_id_type]' 
/projects/lib/BOOST/1_44_0/include/boost/archive/detail/iserializer.hpp:356: instantiated from 'static void boost::archive::detail::load_non_pointer_type<Archive>::load_primitive::invoke(Archive&, T&) [with T = boost::archive::class_id_type, Archive = portable_binary_iarchive]' 
/projects/lib/BOOST/1_44_0/include/boost/archive/detail/iserializer.hpp:433: instantiated from 'static void boost::archive::detail::load_non_pointer_type<Archive>::invoke(Archive&, T&) [with T = boost::archive::class_id_type, Archive = portable_binary_iarchive]' 
/projects/lib/BOOST/1_44_0/include/boost/archive/detail/iserializer.hpp:586: instantiated from 'void boost::archive::load(Archive&, T&) [with Archive = portable_binary_iarchive, T = boost::archive::class_id_type]' 
/projects/lib/BOOST/1_44_0/include/boost/archive/detail/common_iarchive.hpp:66: instantiated from 'void boost::archive::detail::common_iarchive<Archive>::load_override(T&, int) [with T = boost::archive::class_id_type, Archive = portable_binary_iarchive]' 
/home/myfolder/src/portable_binary_iarchive.hpp:140: instantiated from 'void portable_binary_iarchive::load_override(T&, int) [with T = boost::archive::class_id_type]' 
/projects/lib/BOOST/1_44_0/include/boost/archive/detail/interface_iarchive.hpp:60: instantiated from 'Archive& boost::archive::detail::interface_iarchive<Archive>::operator>>(T&) [with T = boost::archive::class_id_type, Archive = portable_binary_iarchive]' 
/projects/lib/BOOST/1_44_0/include/boost/archive/detail/common_iarchive.hpp:51: instantiated from 'void boost::archive::detail::common_iarchive<Archive>::vload(boost::archive::class_id_type&) [with Archive = portable_binary_iarchive]' 
/home/myfolder/src/portable_binary_iarchive.cpp:128: instantiated from here 
/home/myfolder/src/portable_binary_iarchive.hpp:107: error: call of overloaded 'class_id_type(intmax_t&)' is ambiguous 
/projects/lib/BOOST/1_44_0/include/boost/archive/basic_archive.hpp:118: note: candidates are: boost::archive::class_id_type::class_id_type(size_t) 
/projects/lib/BOOST/1_44_0/include/boost/archive/basic_archive.hpp:115: note:     boost::archive::class_id_type::class_id_type(int) 

उत्तर

1

वास्तव में आपके प्रश्न का सीधा जवाब नहीं है, लेकिन मुझे Google के प्रोटोकॉल बफर के साथ बहुत सफलता मिली है। वे उन्हें आंतरिक रूप से उपयोग करते हैं और उन्हें खुले खुले: http://code.google.com/p/protobuf/

+0

धन्यवाद, लेकिन मुझे प्रोटोबफ पता है, और यह मेरे वास्तुकला में अच्छी तरह से फिट नहीं है। तो मैं इसे करने के लिए बूस्ट सीरियलाइजेशन तरीका ढूंढ रहा हूं। – Philipp

0

मैंने जी ++ 4.1.2 के साथ बनाया और यह ठीक काम करता है। मुझे बीजेम से नफरत है, यह देखना मुश्किल है कि क्या हो रहा है, और यह अविश्वसनीय रूप से धीमा है। एक बहिष्कृत शीर्षलेख के बारे में एक चेतावनी थी, और चूंकि इसमें एक बहिष्कृत मित्र घोषणा की व्यवस्था है, इसलिए मैं कुछ पुराना देखने की उम्मीद कर रहा था, लेकिन मैं नहीं करता।

क्या आपने इसे बीजेएम के साथ बनाया था या आपने अपनी निर्देशिका में क्रमबद्धता को खींचने की कोशिश की है और इसे स्वयं करते हैं? चूंकि आपकी निर्देशिका संरचना बिल्कुल पैकेज की तरह नहीं है।

0
#define private public 

निजी सदस्यों तक पहुंचने के बारे में पहली त्रुटि से छुटकारा पाना चाहिए। यह थोड़ा सा गाल है! लेकिन यह एक अस्थायी फिक्स के रूप में काम कर सकता है जब तक कि आप पूरे कार्यक्रम को बेहतर नहीं समझते।

+0

क्या इसमें अन्य कोड तोड़ने की क्षमता है? – shuttle87

+0

मुझे लगता है कि यह करना सुरक्षित है। मैंने इसे कभी नहीं किया है, यह जांचने के अलावा कि यह काम करता है। ऐसा करने का एक और तरीका यह है कि इसे 'g ++ -Dprivate = public prog.cpp -o prog' संकलित करने के लिए कमांड लाइन पर पास करना है। बेशक, यह सुनिश्चित करना आपकी ज़िम्मेदारी है कि आप निजी डेटा से सही तरीके से निपटें। लेकिन अगर आप उस वर्ग के आंतरिक रूप से सही ढंग से समझते हैं, तो आप इसे समझदार तरीके से बातचीत करने में सक्षम होना चाहिए। –

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^