2013-05-04 13 views
6

से किसी टेम्पलेट क्लास के टेम्पलेट सदस्य फ़ंक्शन को कॉल करने में असमर्थ मुझे किसी अन्य टेम्पलेट क्लास के टेम्पलेट क्लास के टेम्पलेट सदस्य फ़ंक्शन तक पहुंचने का प्रयास करते समय संकलक त्रुटियां मिल रही हैं। getSubmatrix पर एक फ़ंक्शन कॉल संकलक (0, 0) पैरामीटर के बारे में संकलक चेतावनी, "अभिव्यक्ति परिणाम अप्रयुक्त" में परिणाम देता है, अंत में संकलक त्रुटि के साथ विफल रहता है "गैर स्थैतिक सदस्य फ़ंक्शन के संदर्भ में" कहा जाना चाहिए।किसी अन्य टेम्पलेट वर्ग

मैट्रिक्स वर्ग:

template <std::size_t m, std::size_t n, typename T, std::size_t rowPadding = 0> 
class Matrix 
{ 
public: 
    ... 

    template <std::size_t p, std::size_t q> 
    Matrix<p, q, T, n - q>& getSubmatrix(std::size_t column, std::size_t row) 
    { 
     ... 
    } 
}; 

बदलने वर्ग:

template <typename T> 
class Transform 
{ 
public: 
    ... 

    Matrix<4, 4, T> matrix() const 
    { 
     ... 

     Matrix<4, 4, T> result; 
     result.getSubmatrix<3, 3>(0, 0) = Matrix<3, 3, T>(); 

     ... 
    } 
}; 

ध्यान दें कि Matrix<4, 4, float> बजाय Matrix<4, 4, T> को मैट्रिक्स प्रकार बदलने वैध संकलन का परिणाम देगा। कंपाइलर क्लैंग 4.0 है और भाषा संस्करण सी ++ 11 है।

+1

इस प्रविष्टि के लिए आपको बहुत बहुत धन्यवाद, यह वास्तव में क्लैंग त्रुटि संदेश से अनुमान लगाने के लिए बेहद मुश्किल था। –

उत्तर

12

आप कीवर्ड template जोड़ना चाहिए: इसके बिना

result.template getSubmatrix<3, 3>(0, 0) = Matrix<3, 3, T>(); 
//  ^^^^^^^^ 

, संकलक सोचेंगे कि < एक तुलना ऑपरेटर है।

पीएस। उस स्थिति में, g ++ थोड़ा और समझने योग्य त्रुटि उत्पन्न करता है:

error: invalid operands of types <unresolved overloaded function type> and int to binary operator<

+0

आपको बहुत बहुत धन्यवाद! –

+2

गोश, सी ++ टेम्पलेट सिंटैक्स इतना सहज है।

+0

यह लगभग किसी के रूप में भाषा चश्मे बनाने में टेम्पलेट वाक्यविन्यास का आविष्कार किया गया है ...: पी –

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