2014-02-09 3 views
0

Итак, внутри моего ArcherArmor.cpp, я пытаюсь понять, почему список инициализаторов карты не работает, но по какой-то причине я продолжаю получать «Ошибка C2593:« operator = »неоднозначна». Вот мой код:Ошибка инициализации карты

У меня также есть класс, из которого вызывается ArcherArmor, у которого есть структура, называемая Armor, которую я забыл для простоты. Основная проблема заключается в том, что ошибка! Единственное, о чем я могу думать, это то, что im инициализирует карту неправильно.

//ArcherArmor.h 
#include <string> 
#include <map> 
class ArcherArmor 
{ 
    private: 
    map <int, Armor> soldier_armor; 
    public: 
    void ArcherArmor_shop(); 
}; 

//ArcherArmor.cpp 
#include "ArcherArmor.h" 
void ArcherArmor::ArcherArmor_shop(){ 
    soldier_armor = {//name, damage, price 
      {1, Armor("Meito Ichimonji", 4, 150, 1)}, 
      {2, Armor("Shusui", 10, 230, 2)}, 
      {3, Armor("Apocalypse", 16, 300, 3)}, 
      {4, Armor("Blade of Scars", 24, 550, 4)}, 
      {5, Armor("Ragnarok", 32, 610, 5)}, 
      {6, Armor("Eternal Darkness", 40, 690, 6)}, 
      {7, Armor("Masamune", 52, 750, 7)}, 
      {8, Armor("Soul Calibur", 60, 900, 8)} 
     }; 
} 

//Main.cpp 
/*code left our for simplicity*/ 
+0

Это назначение, а не инициализация. Кроме того, если ваши ключи являются последовательными целыми числами, также можно использовать «вектор». – user3286380

+0

О, спасибо за разъяснение, и карта более подходит, потому что я могу в конечном итоге изменить ключи и прочее. Это только потому, что я могу заставить его работать, тогда я буду работать оттуда. – Damian

ответ

0

Часть вашего кода, приведенная здесь, кажется, в порядке. Я использовал тип кортежа, чтобы заменить ваш тип брони (не указан в вашем вопросе), а код компилируется с помощью gcc (4.8.1). Я думаю, проблема в другом месте вашего кода.

//ArcherArmor.h 
#include <string> 
#include <map> 

#include <tuple> 
using namespace std; 
using Armor = std::tuple<string,int,int,int>; 

class ArcherArmor 
{ 
    private: 
    map <int, Armor> soldier_armor; 
    public: 
    void ArcherArmor_shop(); 
}; 

//ArcherArmor.cpp 
//#include "ArcherArmor.h" 
void ArcherArmor::ArcherArmor_shop(){ 
    soldier_armor = {//name, damage, price 
      {1, Armor("Meito Ichimonji", 4, 150, 1)}, 
      {2, Armor("Shusui", 10, 230, 2)}, 
      {3, Armor("Apocalypse", 16, 300, 3)}, 
      {4, Armor("Blade of Scars", 24, 550, 4)}, 
      {5, Armor("Ragnarok", 32, 610, 5)}, 
      {6, Armor("Eternal Darkness", 40, 690, 6)}, 
      {7, Armor("Masamune", 52, 750, 7)}, 
      {8, Armor("Soul Calibur", 60, 900, 8)} 
     }; 
} 

int main() { 
    ArcherArmor a; 
    return 0; 
} 
+0

Ваше право, оно работает на моем mac (Xcode). Итак, я думаю, это проблема Visual Studio. – Damian

Смежные вопросы