char型の文字列を、stringクラスの文字列に変える方法について
分かる方よろしくお願いします。
stringクラスのオブジェクト生成時に、↓のようにしましたが、
char型からstd::basic_stringに変換できないというエラーが
出てしまいます。
char charArr[] = "ABC";
string strArr = charArr;
main.cpp
d:\visualc++2005\original\file_test\file_test\main.cpp(56) : error C2440: '初期化中' : 'unsigned char [256]' から 'std::basic_string<_Elem,_Traits,_Ax>' に変換できません。
with
[
_Elem=char,
_Traits=std::char_traits<char>,
_Ax=std::allocator<char>
]
コンストラクタはソース型を持てません、またはコンストラクタのオーバーロードの解決があいまいです。
ビルドログは "file://d:\Yasunari\VisualC++2005\original\file_test\file_test\Debug\BuildLog.htm" に保存されました。
file_test - エラー 1、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新、0 スキップ ==========
エラー内容にヒントがありますね。
VSの設定を確認してください。
[プロジェクト] -> [***のプロパティ] -> [構成プロパティ] -> [C/C++]
-> [言語] -> [char 型を規定で unsigned]
ここが「はい」になっている場合、「いいえ」にしてあげるか
ソース内で明示的に「signed」を指定してあげるといいと思います。
char charArr[] = "ABC";
↓
signed char charArr[] = "ABC";
>keichanさん
ご回答ありがとうございます。
> [プロジェクト] -> [***のプロパティ] -> [構成プロパティ] -> [C/C++]
> -> [言語] -> [char 型を規定で unsigned]
ですが、[はい]になっていました。[いいえ]にすることで、
コンパイルが通りました。
ただ、その後、再び[はい]に戻すと、なぜかコンパイルが通りました。(先ほど通らなかったのに...)結局、いずれの設定でも通るようになりました。
char charArr[] = "ABC"; ・・・・・・ ○
(これで、とりあえず、私の質問内容は解決です)
ちなみに、今度は、下記のようにsigned & unsignedを付与して実施したところ、コンパイルが通りません。
signed char charArr[] = "ABC"; ・・・・・・ ×
unsigned char charArr[] = "ABC"; ・・・・・・ ×
charは、signed charやunsigned charと何かが異なるようです。
これは、どういうことでしょう?
Cではcharはsigned charまたはunsigned charのどちらかの型ですが,
C++ではcharとsigned charとunsigned charはそれぞれ全く異なる型です。
それ故,signed charやunsigned charの配列をconst charの配列で初期化することはできません。
>YuOさん
ご回答ありがとうございます。
> Cではcharはsigned charまたはunsigned charのどちらかの型ですが,
> C++ではcharとsigned charとunsigned charはそれぞれ全く異なる型です。
charとsigned charやunsigned charの型がC++では違うということは
わかりました。
> それ故,signed charやunsigned charの配列をconst charの配列で初期化することはできません。
これは、↓の"3つは不可"ということですか?この3つはコンパイルが通るようですが、私が何か勘違いをしているのでしょうか?
一. signed char charArr[] = "ABC"; ⇒ ○
二. unsigned char charArr[] = "ABC"; ⇒ ○
三. char charArr[] = "ABC"; ⇒ ○
ちなみに現時点の状態を整理すると、↓のようになります。
① signed char charArr[] = "ABC";
string strArr = charArr; ⇒ ×
② unsigned char charArr[] = "ABC";
string strArr = charArr; ⇒ ×
③ char charArr[] = "ABC";
string strArr = charArr; ⇒ ○
> それ故,signed charやunsigned charの配列をconst charの配列で初期化することはできません。
ごめんなさい。これは勘違いでした。規格を調べたら,思いっきり,
> char array (whether plain char, signed char, or unsigned char) can be initialized by a stringliteral (optionally enclosed in braces);
と,signed/unsigned charの配列を初期化できると書いてありました。
ツイート | ![]() |