2017-07-19 10 views
-4

structを介して基本的なmetodsで設定しようとしました。 これは私の変種です:基本的な設定はC++で設定されています

#include <iostream> 

using namespace std; 

struct Set<T> { 
    int n; 
    T[n] elements; 
} 

int main(){ 
    struct Set microSet; 
    int oneElm, length; 
    cin>>length; 
    microSet.n=length; 
    for(int i=0;i<length;i++) { 
     cin>>oneElm; 
     microSet.elements[i]=oneElm; 
    } 

    for(int i=0;i<length;i++) 
     cout << microSet.elements[i]; 

    return 0; 
} 

Compilatorは私にsructに関連するエラーを示します。 どうしたのですか?

+2

実際のエラーテキストは何を表していますか?構造体/クラス本体は ';'で終わらなければならないことに注意してください。 – NathanOliver

+6

[良いC++の本](https://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)を読むべきです –

+3

これは学習の練習ではない場合は、 'std ::セット '。 – cdhowie

答えて

6

あなたのコードは違法です(多くの場所で間違っていますので、good C++ bookを読んでからC++ referenceのウェブサイトをご覧ください)。可変長配列をstructまたはclassのメンバとして宣言することはできません(たとえできたとしても構文が間違っているため、の拡張子は、C99ではC++の方言はflexible array membersです)。 )。

既存の標準C++ containersを使用することをお勧めします。あなたがそれらを使用することができない場合は、ポインタが必要です(そしてあなたはsmart pointersを好むべきです)。

拡張子としてVLAを受け入れるコンパイラがあっても、おそらくdynamically allocateのメモリゾーンが必要です。

コンテナを使用することを強くおすすめします。

コンパイル時にすべての警告&デバッグ情報を有効にすることを忘れないでください。 GCCでは、g++ -Wall -Wextra -gを指定してコンパイルします。デバッガ(gdb)とおそらくvalgrindを使用します。

関連する問題