2014-02-09 99 views
0

好吧,在我的ArcherArmor.cpp中,我试图弄清楚为什么映射初始化列表不起作用,但出于某种原因,我总是收到“Error C2593:'operator ='不明确”。这里是我的代码:初始化映射时出错

我也有一个ArcherArmor派生自的类,它有一个名为Armor的结构,为简单起见我省略了这个结构。主要的问题是错误!我能想到的唯一的事情是即时映射初始化错误。

//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

这是分配,而不是初始化。此外,如果你的密钥是顺序整数,也可以使用'vector'。 – user3286380

+0

哦,谢谢你的澄清和地图更合适,因为我可能最终会改变钥匙和东西。这只是让我能够工作,然后我会从那里工作。 – Damian

回答

0

这里给出的代码部分似乎没问题。我使用元组类型来替换你的Armor类型(在你的问题中没有显示),并且代码用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