1

でいくつかのエラーが発生しているようです

map<string,function<XMLSerializable*()>> mapConstructor;

特に、

 la5.cpp: In function ‘int main(int, char**)’:
 la5.cpp:21:13: error: ‘function’ was not declared in this scope
 la5.cpp:21:43: error: ‘mapConstructor’ was not declared in this scope
 la5.cpp:21:43: error: template argument 2 is invalid
 la5.cpp:21:43: error: template argument 4 is invalid
 la5.cpp:25:58: warning: lambda expressions only available with -std=c++0x or - std=gnu++0x [enabled by default]
 la5.cpp:33:26: error: expected primary-expression before ‘*’ token
 la5.cpp:33:28: error: expected primary-expression before ‘)’ token
 la5.cpp:33:31: error: ‘pFunc’ was not declared in this scope
 make: *** [la5.o] Error 1

残念ながら、インストラクターによってクラスに与えられたマップ宣言を処理しているように見えるため、間違ったことを見つけることができないようです。以下は私の.cppです

#include <iostream>
#include <map>
#include <string>
#include <functional>

#include "Armor.h"
#include "Weapon.h"
#include "Item.h"
#include "Creature.h"

using namespace std;

XMLSerializable * constructItem()
{
        return new Item;
}

int main(int argc, char * argv[])
{

    map<string,function<XMLSerializable*()>> mapConstructor;

    mapConstructor["Item"] = constructItem;

    mapConstructor["Creature"] = []() {return new Creature; };

    cout << "Input the class name, then we'll try to construct it." << endl;

    string sLookup = " ";

    cin >> sLookup;

    function<XMLSerializable*()> pFunc = mapConstructor[sLookup];

    if(pFunc() == NULL)
    {
            cout << "Sorry, the object couldn't be constructed." << endl;
    }
    else
    {
            cout << pFunc() << " a non NULL value was returned!" << endl;
    }
    return 0;
}

助言がありますか?私は地図に詳しくありませんが、これでうまくいくと思いますよね?

pico でコーディングし、g++ を使用して makefile でコンパイルします。

4

1 に答える 1

1

C++11 を有効にするために、-std=c++11またはコンパイラ フラグに追加するのを忘れているようです。-std=c++0x

-std=c++0xは非推奨ですが、古いバージョンの g++ では-std=c++11使用できません。

于 2013-10-04T03:21:15.190 に答える