0

このような恥ずかしいほど初歩的な質問を投稿して非常に申し訳ありませんが、私は大学時代から C++ をあまりいじっていませんでした。ある時点で、ポインターと C++ 文字列について知っていることをすべて頭から飲み干したと思います。基本的に、出力を処理する PDCurses を使用して C++ コンソール アプリ (正確にはローグライク) を作成しています。動的な文字列を表示したいのですが (動的なゲームでは非常に便利だと思います)、mvaddstr() でエラーが発生し続けます。これが私がやろうとしていることの例です:

 string vers = "v. ";
 vers += maj_vers;// + 48;
 vers += ".";
 vers += min_vers;// + 48;
 vers += ".";
 vers += patch_vers;// + 48;
 char *pvers = vers.c_str();
 mvaddstr(5,17, pvers);
 refresh();

もちろん、これによりconst char*' to、char *pvers 定義で「char*' からの変換が無効です」というエラーが表示されます。私はここで本当に厚かましく、ばかげた間違ったことをしていることを知っていますが、私はこれについて本当に錆びています。どんな助けでも非常に役に立ちます。

4

2 に答える 2

2

Asveikauは正しいですが、いくつかのncursesドキュメントを検索して、別のオプションを見つけました。常にmvprintw(col, row, "v. %d.%d.%d", maj_vers,min_vers,patch_vers)同じ効果を得ることができました。

于 2010-01-29T17:53:40.587 に答える
2

次のように宣言するpversだけです:

const char *pvers = vers.c_str();

これconstは、 が指すメモリを変更しないことを意味しますpvers。これは、この仮定を破った場合にコンパイラが怒鳴ることができるようにするためのヒントです。(コンパイラの警告が表示されたのはそのためです。)この行を超えてpvers変更した後に使用すると、何かおかしくなり始めるかもしれませんversが、投稿したスニペットについては、その問題は見られません。

于 2010-01-29T17:40:14.730 に答える