次のコードをcからC++に変換する際に問題があります。
argとしてmoveシーケンス(aからiまでの文字列)をとる関数があります。char配列へのポインタC++
コード:
void mkmove(char** move) {
int i = 0;
char* p = NULL;
int moves[9][9];
for(int i = 0; i < 9; i++) {
for(p = move[i]; *p; p++) {
moves[i][*p - 'a'] = 3;
}
}
}
int main() {
char* movestr[] = {"abde", "abc", "bcef", "adg", "bdefh", "cfi", "degh", "ghi", "efhi"};
mkmove(movestr);
return(0);
}
gccがそのコードの罰金をコンパイルしますが、私はグラムでそれをコンパイルしようとした場合++、それは私に次の警告提供します:
main.cppに:17:39:警告:文字列から非推奨の変換を定数は 'char *' [-Wwrite-strings]
私はこの警告は、Cの文字列はchar []と定義され、C++はstd :: stringを使用するという事実から来ていると思います。
だから私はC++のような文字列を使用するようにコードを交換しようとした:主な機能に
std::string* movestr = {'abde', "abc", "bcef", "adg", "bdefh", "cfi", "degh", "ghi", "efhi"};
とC++の文字列のヘッダーファイルを追加します:mkmove機能defenitionで
void mkmove(std::string* move) {
、との
を#include <string>
ここでエラーが発生します:
main.cpp:関数 'void mkmove(std :: string *)':main関数の 'int main()'で:
()内の 'std :: string {aka std :: basic_string}'を 'char *'に変換することはできません。
main.cpp: main.cpp:19:39:error:スカラーオブジェクト 'movestr'にイニシャライザの要素が1つ必要です
私はまたいくつかの調整を試みましたが、コンパイル時にエラーが発生しませんでした。
トップコードをCからC++に変換する適切な方法は何ですか?
ありがとうございました!
-Slovenia1337
または(Uを歌うC++ 11) 'std :: vector movestr = {" abde "、" abc "、...}; ' –
bames53