-2

このコードを見てください(そして知識の欠如を許してください)。解決できなかったエラーを出力します。構造体Cの要素のベクトルを宣言する必要がありますが、要素の数はi(int型の入力)である必要があります。

他のアプローチも試しましたが、すべてでエラーが発生しました(Cをintに変換できないなど)。これどうやってするの?

# include < iostream >
using std::cout;
using std::cin;
using std::endl;

# include < vector >
using std::vector;

struct C{
    int cor;
    vector<int>cores;

    };

    void LerVector( vector< C> &array ) ;

int main ()
{
     int n;
    bool done=false;
        bool don=false;
    vector<C>cidade;
    int i;


    while(!done){
    cout<<"Entre o número de cidades "<<endl;
    cin>>n;
    if(n>500)
    {
        cout<<endl;
        cout<<"O número máximo é 500"<<endl;
}
else
done=true;
}
n--;
while(!don){
cout<<"Entre o número de confederações"<<endl;
cin>>i;
if(i>100){
cout<<endl;
cout<<"Número máximo de 100 cidades"<<endl;

}
else {

 LerVector(  cidade) ;

don=true;
}
}


    cin.get();
    return 0;
}
//resolve...
 void LerVector( vector< C> &array ) 
  { 
    for ( size_t i = 0; i < array.size(); i++ ) 
      cin>>array[i];

  } // end function inputVector 
4

5 に答える 5

3

説明してみましょう:)

cin >> array[i];

これは、構造体Cのオブジェクトに抽出しようとしcinます。したがって、実際にその作業を行う演算子>>が必要です。

istream & operator>>(istream &is, C &c) {
    is >> c.cor; // or into whatever member 
    return is;
}

さらに、別の例で述べたように、最初に実際に要素をベクトルに追加する必要があります。

while(!don){
    cout<<"Entre o número de confederações"<<endl;
    ....
} else {
    cidade.resize(i); // resize to i elements
    LerVector(cidade);
    don = true;
}

次回は、テキストをフォーマットしてください(正しくインデントしてください)。私がそれをステップスルーするのは難しかったです:)

于 2009-02-22T01:07:09.300 に答える
1

コードで生成されたエラーはどれですか?

また、あなたのコードが何をするのかわかりません。main()で、Cのベクトルを作成します。ただし、Cにはintのベクトルも含まれています。それは意図されていますか?

于 2009-02-22T01:02:06.163 に答える
1

私はあなたが何をしようとしているのかよくわかりません。

ただし、コードにはすでに1つの潜在的なエラーがあります。

LerVectorでは、現在アイテムが含まれていないため、サイズが0のベクトルへの参照が含まれています。

あなたがやろうとしているのは、iがサイズよりも小さい限り、配列内のそのアイテムを更新することです。ただし、最初はサイズが0なので、入力ループに入るとは思いません。

これで、たとえそうしたとしても、ベクトルはどのサイズでも初期化されていないため、範囲外になるというエラーが発生する可能性があります。rrayのサイズを変更する必要があります。

于 2009-02-22T01:02:06.443 に答える
0

あなたがやりたいことを推測すると、次のようになります。

// First create an empty vector of C's
vector<C> cidade;

// cidade has zero elements now
// Read i from user
cin >> i;

// Resize vector to contain i elements
cidade.resize(i);

// Then go on and fill them.
int n;
for (n = 0; n < i; i++) {
  cin >> cores;
  cidade[n].cores.resize(cores);
  // now cidade[n].cores has 'cores' elements, but they are uninitialized
}
于 2009-02-22T01:01:10.860 に答える
0

コンストラクターの1つはstd::vector<T>初期サイズを取り、その数がわかった後に宣言された場合は、コンストラクターに渡すことができます。

cin >> n;
std::vector<C> cidade(n);

または、resizeメソッドを使用して、ベクトルのサイズを変更できます。

または、addメソッドを使用して、(サイズを明示的に指定せずに)ベクトルを拡張できます。

しかし、全体として、コードの完全版とコードが実行しようとしていることの詳細について支援を提供する方が簡単な場合があります。

于 2009-02-22T01:03:07.347 に答える