2017-05-07 12 views
-3

私はこのタスクのために特定の月に何日があるかを定義するタスクを実行したいと思います。現在の月を取得するために日付と時刻ライブラリを使用しています。当月関数から文字列を返す方法

私はこのエラーを取得しています:

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

string daysInMonth(int month, string months); 
time_t tt = system_clock::to_time_t(system_clock::now()); 
    struct tm * ptm = localtime(&tt); 
    char buff[100]; 

    int days; 
    string months[12] = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"}; 
    int month = ptm->tm_mon+1; 


    switch (month) 
    { 
     case May: { 
      days = 31; 
      cout << daysInMonth(month, months); 

    } 
    } 

string daysInMonth(int month, string months) { 
    for (int i = 0; i < sizeof(months)/sizeof(months[0]); i++) 
    { 
     if (month == i) 
     { 
      return months[i - 1]; 

     } 
    } 
} 
+0

@CoolGuy whoops、OPは実際にあなたがコメントしたので、彼の質問を変え、それが私を惑わしました。私の前のコメントは無視してください。 – Quentin

+1

あなたの質問を新しいものに変えないでください。それは与えられた答えを無効にします。今、別の問題がある場合は、別の質問をしてください。 –

+0

https://stackoverflow.com/questions/1975128/sizeof-an-array-in-the-c-programming-languageを読んで、std :: vectorまたはstd :: arrayを使用することを検討してください。あなたはあなたが望むことをすることができます。 https://ideone.com/3Ym0hT –

答えて

5

あなたが機能daysInMonthを宣言するとき、あなたはmonthsパラメータは単一の文字列であるので、それはmonths[i - 1]がに評価することを考えているコンパイラに伝えます文字列内の単一の文字。

これを修正するには、daysInMonthの宣言を string daysInMonth(int month, string months[12])に変更します。

+0

これで問題は解決しましたが、今ではこの問題が解決しました:Basic_1.exeの0x000D59FBでスローされた例外:0xC0000005:0xCCCCCCE0の位置を読み取るアクセス違反。 – Viktor

+1

あなたのクラッシュがあなたの質問にないコードにあると思います。これには答えがあるので、エラーを示す短い完全な例をまとめて、別の質問をしてください。 –

+0

enum型以外のコードはありません – Viktor