我想创建一个具有3个值的结构:一个字符串和两个整数。该字符串是强制性的,但是(或两者)都是可选的,如果未指定,则默认为-1。将从元组派生的对象放入C++中的向量中
但是,而不是使用一个结构,我想我会尝试一个std ::元组。为了将两个整数的可选的烦躁,我设置了“三重奏”类性病从继承::元组,如下:
#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)
{
}
};
然后我去推一些三重奏对象来测试类三重奏到一个std ::向量:
#include <vector>
int main(void)
{
std::vector<Trio> trios;
Trio trio("trio1", 1, 1);
trios.push_back(trio);
return 0;
}
它给了我在Visual Studio 2010中出现以下错误:
>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 2013-02-20 19:10:41
这为我编译与g ++ http://ideone.com/ZAIDUp – juanchopanza 2013-02-20 19:11:10