में एक वेक्टर में ट्यूपल से प्राप्त वस्तुओं को रखने के लिए मैं 3 मानों के साथ एक संरचना बनाना चाहता हूं: एक स्ट्रिंग और दो इंट्स। स्ट्रिंग अनिवार्य है, लेकिन इनट्स के या तो (या दोनों) वैकल्पिक हैं और निर्दिष्ट नहीं होने पर -1 तक डिफ़ॉल्ट हो सकते हैं।सी ++
हालांकि, एक संरचना का उपयोग करने के बजाय, मैंने सोचा कि मैं एक std :: tuple का प्रयास करूंगा।
#include <string>
#include <tuple>
class Trio : public std::tuple<std::string, int, int>
{
public:
explicit Trio(std::string const & name, int val1 = -1, int val2 = -1)
:
tuple(name, val1, val2)
{
}
};
तो मैं कुछ तिकड़ी वस्तुओं धक्का द्वारा तिकड़ी वर्ग परीक्षण करने के लिए जाना: आदेश, एक "तिकड़ी" वर्ग जो एसटीडी से विरासत :: नीचे के रूप में टपल दो ints की वैकल्पिक सत्ता शामिल करने के लिए मैं सेटअप में
#include <vector>
int main(void)
{
std::vector<Trio> trios;
Trio trio("trio1", 1, 1);
trios.push_back(trio);
return 0;
}
यह मेरे दृश्य स्टूडियो 2010 में निम्न त्रुटि देता है:: एक std :: वेक्टर में
>c:\program files (x86)\microsoft visual studio 10.0\vc\include\tuple(127):
error C2664: 'std::basic_string<_Elem,_Traits,_Ax>::basic_string(const
std::basic_string<_Elem,_Traits,_Ax> &)' : cannot convert parameter 1
from 'const Trio' to 'const std::basic_string<_Elem,_Traits,_Ax> &'
with
[
_Elem=char,
_Traits=std::char_traits<char>,
_Ax=std::allocator<char>
]
Reason: cannot convert from 'const Trio' to 'const
std::basic_string<_Elem,_Traits,_Ax>'
with
[
_Elem=char,
_Traits=std::char_traits<char>,
_Ax=std::allocator<char>
]
No user-defined-conversion operator available that can perform
this conversion, or the operator cannot be called
किसी को समझ में है कि मैं क्या गलत तरीके से यहाँ कर रहा हूँ? क्या कुछ स्पष्ट है कि मैं बस नहीं देख रहा हूं? क्या मैं शायद, std :: tuple के उपयोग का गंभीर दुरुपयोग कर रहा हूं?
धन्यवाद,
हारून
ideone पर ठीक संकलित: http://ideone.com/9q0nxW – Bill
यह मेरे लिए के साथ जी ++ http://ideone.com/ZAIDUp – juanchopanza