3つの値を持つ構造体を作成したい:文字列と2つのint。文字列は必須ですが、intのどちらか(または両方)はオプションです。指定されていない場合、デフォルトは-1になります。タプルから派生したオブジェクトをC++のベクトルに配置する
しかし、構造体を使用するのではなく、私はstd :: tupleを試してみると思いました。 2つのint、Iセットアップ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でOK: – Bill
これはg ++で私のためにコンパイルされています。http://ideone.com/ZAIDUp – juanchopanza