लिंकर समस्या

वोट
2

मैं लिंकर जब मैं अपने वर्तमान प्रोजेक्ट निर्माण के साथ एक समस्या है।

इस प्रकार त्रुटि इसके साथ आता है:

libmiinddynamic.so: undefined reference to `std::basic_ostream<char, std::char_traits<char> >& SparseImplementationLib::operator<< <double, double, SparseImplementationLib::DefaultPtr<double, double> >(std::basic_ostream<char, std::char_traits<char> >&, SparseImplementationLib::AbstractSparseNode<double, double, SparseImplementationLib::DefaultPtr<double, double> > const&)'

यह थोड़ा अजीब है, जहाँ तक मुझे पता है इस विधि एक फ़ाइल है कि निश्चित रूप से संकलित किया जा रहा में घोषित किया जाता है कर रहा हूँ के रूप में:


namespace SparseImplementationLib {
        template <ActivityType,WeightType,ptr_type = 
DefaultPtr<ActivityType,WeightType> > class AbstractSparseNode;
    // A whole bunch of other methods

//! All derived classes from AbstractSparseNode can use operator<<
template <class ActivityType, class WeightType, class ptr_type>
ostream& operator<<
(
    ostream& s, 
    const AbstractSparseNode<ActivityType,WeightType>& node)
{
    node.ToStream(s);
    return s;
}

}

क्या किसी को पता है कि क्यों इस त्रुटि पॉप अप हो सकते?

एनबी यह फेडोरा पर MPICXX का उपयोग कर संकलित किया गया है, और मैं CCMAKE उपयोग कर रहा हूँ।

चीयर्स, एड

संपादित ठीक है, एनएम का उपयोग कर मैं निम्नलिखित पाया है:

std::ostream& SparseImplementationLib::operator<< <double, double, SparseImplementationLib::DefaultPtr<double, double> >(std::ostream&, SparseImplementationLib::AbstractSparseNode<double, double, SparseImplementationLib::DefaultPtr<double, double> > const&)

जब यह इस बजाय चाहता है:

std::basic_ostream >& SparseImplementationLib::operator<< <double, double, SparseImplementationLib::DefaultPtr<double, double> >(std::basic_ostream >&, SparseImplementationLib::AbstractSparseNode<double, double, SparseImplementationLib::DefaultPtr<double, double> > const&)
दुर्भाग्य से, मैं पता नहीं है कि यह कैसे तय करने के लिए, ऑपरेटर ग्राहकों << केवल 2 तर्क लेता है।

किसी को भी एक सुराग मिल सकता है?

(सभी _s से पहले यादृच्छिक \ रों कोशिश करते हैं और उन्हें बचने के लिए, stackoverflow आज एक छोटे से मनमौजी किया जा रहा है और यह काम नहीं चलेगा (अन्यथा हम मेरी कोड में बेतरतीब ढंग से सुंदर इटैलिक प्राप्त))

12/03/2009 को 16:31
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


2 जवाब

वोट
1

आप एनएम वस्तु जो ऊपर दिखाए गए कोड से उत्पन्न होता है, को देखने के लिए कर सकते हैं कि हस्ताक्षर वास्तव में आप क्या उम्मीद करते हैं।

12/03/2009 को 16:59
का स्रोत उपयोगकर्ता

वोट
0

(पुनः स्वरूपित) पार्स करने के लिए है कि लाइन तो मैं उसे पढ़ सकते हैं कोशिश कर रहा है ...

libmiinddynamic.so: undefined reference to:
ostream & SparseImplementationLib::operator<<
   < double, double, SparseImplementationLib::DefaultPtr<double, double> >
(
   ostream &,
  SparseImplementationLib::AbstractSparseNode<
     double, double, SparseImplementationLib::DefaultPtr<double, double> > const
)

तो मुझे लगता है कि सही है, तो पढ़ें:

  • वर्ग ActivityType एक है डबल
  • वर्ग WeightType एक है डबल
  • वर्ग ptr_type एक है SparseImplementationLib :: DefaultPtr <डबल, डबल>

और किसी भी तरह दूसरा तर्क
स्थिरांक AbstractSparseNode <ActivityType, WeightType> और ,
जैसे स्थिरांक AbstractSparseNode <डबल, डबल> और
एक बन गया है:

  SparseImplementationLib::AbstractSparseNode<
     double,
     double,
     SparseImplementationLib::DefaultPtr<double, double>
       > const &

टेम्पलेट तर्क गिना जाता है ऊपर से मेल नहीं खाते। आप 2 टेम्प्लेट पैरामीटर के साथ दूसरा (टेम्प्लेट की गई) तर्क परिभाषित किया है और अपने त्रुटि संदेश 3 टेम्प्लेटेड मापदंडों इंगित करता है।

12/03/2009 को 17:46
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more