2017-03-16 9 views
-1

私は学校のための小さなプロジェクトを行っていますし、モンスターの種類を持つ列挙型を作成してから、値を受け取り、モンスタータイプを文字列として表示する関数を作成する必要があります。ここでは、コードの私のビットです:私は取得していますenumからの文字列として表示されたC++名

enum MonsterType 
{ 
    GHOST, 
    DRAGON, 
    GHOUL, 
    SHRIEKER, 
    GRIFFIN, 
}; 

string getTypeName() 
{ 
    int ID; 
    cout << "Input Monster ID" << endl; 
    cin >> ID; 
    return MonsterType(ID); 
} 

エラーは次のとおりです。

no suitable constructor exists to convert from "MonsterType" to "std::basic_string<char, std::char_traits<char>, std::allocator<char>>" 

'return': cannot convert from 'MonsterType' to 'std::basic_string<char,std::char_traits<char>,std::allocator<char>>' 

私が欠けている小さなことがあります確信していますあなたが私を助けることができるなら、気づいていないと私は本当にそれを感謝します。

は、あなたが何ができるか、あなたに

+0

_私は気付いていない小さな変換があることを確信しています。なぜ、MonsterTypeとstd :: stringの間に変換があるのか​​、あなたは確信していますか?それはどのように行動すべきですか? –

+0

いいえ、私ができるコンバージョンを意味します。それはおそらく私が行方不明で気づいていない小さなものです。 –

+3

[列挙型の変数を文字列に変換するにはどうすればいいですか?](http://stackoverflow.com/questions/5093460/how-to-convert-an-enum-type-variable-to-a-string) – rsp

答えて

0

ありがとうございこれらのエラーの両方が同じことを言っている

enum MonsterType 
{ 
    GHOST, 
    DRAGON, 
    GHOUL, 
    SHRIEKER, 
    GRIFFIN, 
}; 

string GetName(MonsterType monsterType){ 
    string monsterNames[] = {"Ghost", "Dragon", "Ghoul", "Shriker", "Griffin"}; 
    return monsterNames[monsterType]; 
} 
+2

これは 'enum'定義と非同期になる素晴らしい機会です。 'enum'識別子とテキストの両方を含む構造体を使う方が良いでしょう。例については、インターネットまたはStackOverflowを検索してください。 –

+0

あなたにはありがとう、レスポンスはありますが、そのような種類のモンスターの列挙を使用する目的を破ることはありませんか? –

+0

はい、それは事実ですが、少しの学校プロジェクトで十分であるはずです – Luci

0

です。

return MonsterType(ID)が新しいMonsterTypeになっており、返品しようとしています。

関数は(あなたは「何のパラメータ」を言わないようにしたい場合は、本当にstring getTypeName(void)する必要があります)string getTypeName()を試作されたので、あなたは、このようにstringにその新しいMonsterType変数を変換しようとしています。コンパイラは、これを行う方法がわからないと不平を言っています。

これに最も効果的なアプローチは、定義した多くのタイプのテキスト(string)表現のリストを作成し、それらの間に関数マップを作成することです。

#include <iostream> 

#define ARRAY_SIZE(x) (sizeof(x)/sizeof(x[-1])) 

using namespace std; 

enum MonsterType 
{ 
    GHOST, 
    DRAGON, 
    GHOUL, 
    SHRIEKER, 
    GRIFFIN, 
}; 

string MonsterNames[] = { 
    "Ghost", 
    "Dragon", 
    "Ghoul", 
    "Shrieker", 
    "Griffin", 
}; 

string getTypeName() 
{ 
    int ID; 

    cout << "Input Monster ID" << endl; 

    cin >> ID; 

    if (ID < ARRAY_SIZE(MonsterNames)) { 
     return MonsterNames[ID]; 
    } 
    return "unknown"; 
} 

int main(void) { 
    cout << getTypeName() << endl; 
} 

enumは、単純に数字で識別される「もの」のリストです。あなたはその物の名前に文字列としてアクセスすることはできませんが、「キーワード」としてしかアクセスできません。

+0

申し訳ありませんが、私はこれを行う唯一の簡単な方法だと思います。どうもありがとうございました。 –

関連する問題