2012-02-18 8 views
1

私は約6年前にC++を学びましたが、新しいものを使用してインスタンス化しない限り、配列のセクションで覚えています。サイズは静的で、実行時ではなくリテラル定数でソースコードでのみ設定できます。は静的配列の振る舞いを変更しましたか?

しかし、私はちょうど

http://www.cplusplus.com/doc/tutorial/dynamic/

でチュートリアルで遊んでと新しいのない、そしてそれは働いていた私の驚きにそれを行うことを試みました。私は何かを誤解していますか? 元のコードは、上記のURLにありますが、以下の変更されたコードの内容を確認することは難しくありません。

は、私は、文字列、ベクトルなどで実現...配列は、本当に必要な(この問題は私に起こったことがない理由はおそらく説明)が、ちょうどユーモアは私:)

// rememb-o-matic 
#include <iostream> 
#include <new> 
using namespace std; 

int main() 
{ 
    int i,n; 
// int * p; 
    cout << "How many numbers would you like to type? "; 
    cin >> i; 
    int p[i]; 
// p= new (nothrow) int[i]; 
// if (p == 0) 
//  cout << "Error: memory could not be allocated"; 
    if (false) 
     cout << "whut?" << endl; 
    else 
    { 
     for (n=0; n<i; n++) 
     { 
      cout << "Enter number: "; 
      cin >> p[n]; 
     } 
     cout << "You have entered: "; 
     for (n=0; n<i; n++) 
      cout << p[n] << ", "; 
//  delete[] p; 
    } 
    return 0; 
} 
+0

これはC++では不正です。どのコンパイラを使用していますか? –

+0

i686-apple-darwin11-llvm-g ++ - 4.2 – scruffyDog

+0

もしそうでなければ、 '-std = C++ 98 -pedantic'か' -std = C++ 0x -pedantic'のどちらかを使ってください。適切な警告。 –

答えて

4

コードは、ほとんどのコンパイラので、動作しますされていません可変長アレイ(VLA)からcompiler extensions

しかし、可変長配列はC++標準では許可されていません。このようなコンパイラ拡張を使用すると、コードは移植性が低く、標準に準拠しなくなります。

gccを使用しているので、コードを-pedanticオプションでコンパイルすると、標準では承認されていないことがわかります。

+0

ありがとう、これは私を混乱させていた:D – scruffyDog

3

ベクトルを持つので、C++では可変長配列が必要です。ただ、

std::vector<int> p(i); 

int p[i]; 

を交換し、すべてが順調です。

関連する問題