2011-11-12 14 views
16

के प्रारंभ के लिए कोई मिलान करने वाला कन्स्ट्रक्टर नहीं है मेरे पास एक कक्षा है जिसे मैं प्रारंभ करने का प्रयास करता हूं लेकिन त्रुटि प्राप्त करता हूं" TextureCordinates 'के प्रारंभ के लिए कोई मिलान करने वाला कन्स्ट्रक्टर नहीं; जो मैं प्रारंभ करने में कोशिश कर रहा हूँसी ++ "कंपाइलर त्रुटि

कक्षा:

TextureCoordinates result(point, Dimensions2D(width, height)); 

निर्माता की परिभाषा::

class TextureCoordinates 
{ 
public: 
    TextureCoordinates(){}; 
    TextureCoordinates(Point2D& origin, Dimensions2D& dim); 
    Point2D getOrigin() const {return origin;}; 
    Dimensions2D getDim() const {return dim;}; 
private: 
    Point2D origin; 
    Dimensions2D dim; 
}; 

संकलक त्रुटि के साथ लाइन

TextureCoordinates::TextureCoordinates(Point2D& origin, Dimensions2D& dim): 
origin(origin), dim(dim) {} 

कोई भी विचार है कि मैं क्या कर रहा हूँ गलत?

+0

कहाँ निर्माता की परिभाषा क्या होना चाहिए? मैं देखता हूं कि घोषणा है। – Pubby

+0

मैंने अभी इसे जोड़ा है। – Xavier

उत्तर

16

आपका कन्स्ट्रक्टर गैर-कॉन्स्ट संदर्भ द्वारा तर्क लेता है, लेकिन आप इसे अस्थायी ऑब्जेक्ट (Dimensions2D(width, height)) पास करते हैं। अस्थायी, यहां तक ​​कि गैर-आधार वाले, गैर-कॉन्स्ट संदर्भों से बंधे नहीं हैं।

समाधान, (यह वैसे भी पारित कर दिया वस्तुओं को संशोधित नहीं होना चाहिए) अपने निर्माता स्थिरांक संदर्भ लेने:

TextureCoordinates(Point2D const& origin, Dimensions2D const& dim); 
4
TextureCoordinates result(point, Dimensions2D(width, height)) 

दूसरा पैरामीटर एक rvalue संदर्भ निर्माता उम्मीद lvalue करने के लिए बाध्य नहीं किया जा सकता है :

TextureCoordinates(Point2D& origin, Dimensions2D& dim); 

आप इसे

के निर्माता के हस्ताक्षर बदलकर ठीक कर सकते हैं
TextureCoordinates(Point2D& origin, const Dimensions2D& dim); 
TextureCoordinates(Point2D& origin, Dimensions2D&& dim); // alternative for c++11 

(यदि आप कर सकते हैं) या पैरामीटर एक चर

Dimension2D dim=Dimensions2D(width, height); 
TextureCoordinates result(point, dim) 
-1

आप के कार्यान्वयन लिख किया था बनाने:

TextureCoordinates(Point2D& origin, Dimensions2D& dim); 
0

बाहर Dimensions2d घोषित।

Dimension2d d(width, height); 
TextureCoordinates result(point, d); 
0

अस्थायी चर सी में एक संदर्भ के रूप में पारित नहीं किया जा सकता ++ क्योंकि तब आप समारोह में एक अस्थायी उद्देश्य यह है कि जल्द ही गायब हो जा रहा है का मूल्य बदल सकते !! ऐसा कोई समस्या मौजूद है स्थिरांक के संदर्भ के लिए ..... तो अपने समारोह परिभाषा की तरह

TextureCoordinates(Point2D const& origin, Dimensions2D const& dim); 
संबंधित मुद्दे