1

intC++ で配列を宣言しようとしたところ、この問題が見つかりました。次のコードは g++ コンパイラでは正常に実行されますが、Visual Studio ではコンパイルが失敗します。Bruce Eckel をフォローしていて、このコードを見つけました。

#include<iostream>

int main()
{
    const int j = std::cin.get();
    char buf[j];
}

jただ維持intすることは問題になるでしょう、私は理解しています。の値はj実行時に const になるため、プログラムをコンパイルする必要があります。どこか間違っている場合は修正してください。

4

4 に答える 4

3

の値はj実行const時にあるため、プログラムをコンパイルする必要があります。

いいえ、ここではconst-nessjは関係ありません。C++ は現在、静的サイズの C 配列のみをサポートしています。そのサイズは、コンパイル時の定数でなければなりません。

動的サイズの配列が必要な場合は、 を使用しますstd::vector

g++ がデフォルトでこれをコンパイルするという事実は、(互換性のために) 少し残念です。g++ を使用する場合は、-pedanticフラグを使用して、そのようなコンパイラ拡張機能が有効になっていないことを確認する必要があります (もちろん、コンパイラ拡張機能を使用すること自体は悪いことではありませんが、この場合、実際には何の利点もありません)。

于 2013-09-20T14:50:52.890 に答える
2

可変長配列bufとして定義しようとしています。これは、非標準拡張機能としてサポートされている C (C++ ではない) の機能です。明らかに、他のコンパイラはそれをサポートしていません。g++

私は(または実際に?)にbuf変わることをお勧めしますstd::vector<char>std::string

于 2013-09-20T14:48:34.790 に答える
2

可変長配列は C99 の機能であり、gccclangの両方が C++ の拡張機能としてサポートしていますが、Visual Studio ではサポートされていません。最近C99 のサポートが追加されたにもかかわらず、C++ ではサポートされていません。

C++を使用しない正当な理由がない限り、 C++で開発しているため、 std::vectorまたはstd::stringで十分です。

于 2013-09-20T14:48:26.023 に答える
0

私も同じ問題を抱えていました。長さが変数として格納される配列を作成するのは非常に難しいようです。私がしたことは、追加の関数を作成することです:

void Class:: initMyArray(const int size) {
    myArray = new int[size]
}

あとは、その関数を呼び出して変数を渡すだけです。ただし、これが適切な解決策であるかどうかはわかりません (私は C++ の専門家ではありません)。

于 2015-03-25T17:52:27.463 に答える