Це працює в Visual Studio 2010, але це не в оновлення 2 для 2012 (з Boost 1.5.3):
vector<vector<BYTE>> data = assign::list_of (assign::list_of (0x06)(0x02));
Помилка компілятора (оновлена):
C:Program Files (x86)Microsoft Visual Studio 11.0VCincludexmemory0(617): error C2668: "std::vector<_Ty>::vector" : ambiguous call to overloaded function
with
[
_Ty=BYTE
]
C:Program Files (x86)Microsoft Visual Studio 11.0VCincludevector(786): could be "std::vector<_Ty>::vector(std::vector<_Ty> &&)"
with
[
_Ty=BYTE
]
C:Program Files (x86)Microsoft Visual Studio 11.0VCincludevector(693): or "std::vector<_Ty>::vector(unsigned __int64)"
with
[
_Ty=BYTE
]
while trying to match the argument list "(boost::assign_detail::generic_list<T>)"
with
[
T=int
]
... (dozens of more lines)
Будь-який спосіб подолати цю помилку?
Відповіді:
1 для відповіді № 1Я не думаю, що проблема полягає в вбудовуванні, це у створенні тимчасового значення за допомогою list_of. Це має працювати:
vector<BYTE> temp = assign::list_of (0x06)(0x02);
vector<vector<Byte> > data = assign::list_of(temp);
0 для відповіді № 2
Я не маю VC11, тому просто дивна здогадка ... Можливо, VC11 плутається, оскільки ваші цілі числа можуть бути перетворені на BYTE
і так було б використано або для того, щоб рухатися-конструктор size_t
і так std::vector(size_t)
конструктор буде використаний.
Спробуйте перетворитись на BYTE
щоб уникнути неявного перетворення:
vector<vector<BYTE>> data = assign::list_of (assign::list_of (static_cast<BYTE>(0x06))(static_cast<BYTE>(0x02)));
0 для відповіді № 3
Вам потрібно допомогти boost :: призначити :: list_of трохи з параметрами шаблону:
// C2668:
std::vector<std::vector<int>> foo1 =
boost::assign::list_of(boost::assign::list_of(0)(1));
// no C2668:
std::vector<std::vector<int>> foo2 =
boost::assign::list_of<std::vector<int>>(boost::assign::list_of(0)(1));