0

ユーザーの入力に基づいてさまざまな構造を作成する方法があるかどうかを知りたかった. たとえば、このコードを検討してください

#include <iostream>
#include <algorithm>
#include <string>
#include <iomanip>
#include <limits>
#include <stdio.h>
#include <sstream>


using namespace std;
using std::stringstream;
struct rootset {
  double totSize;
  const char *rStrtPtr;
  const char *rEndPtr;

  struct generations {
    double totSize;
    const char *genStrtPtr;
    const char *genEndPtr; 
    int numOfGen;
    string genName;

    struct object {
      double objSize;
      const char *objStrtPtr;
      const char *objEndPtr;
      string id;
      char markBit;
      char objPtr;


      struct freeList {
    double freeSpace;
    int flNumb; 
      };
    };
  } generation;
};

int main()
{

  int gen =0;
  cin >> gen;

  rootset* pRootSet = (rootset*)malloc(1200);

  for( i=0; i<gen; i++) {
    stringstream out;
    out << i;
   string s = out.str();
   string foo = "generation" + s;
   rootset::generations foo;

  }
}

ここで、ユーザーは数字を入力します。それに基づいて、多くの構造を作成したかったのです。しかし、私はこれを行うことができません。助けてください。foo は文字列型であり、この回答を使用できないことに気付きました。

4

1 に答える 1

1

回避できる場合は、おそらく使用したくないmallocでしょう(この場合は非常に簡単に回避できます)。

代わりに、std::vector次のようなコードを提供する を使用します。

int gen;
if (cin >> gen) {
    std::vector<rootset> rootsets(gen);
    // code that uses `rootsets` goes here.
}

genこれにより、さまざまなオブジェクトのベクトル (配列とほぼ同様) が割り当てられrootsetます。でそれを行うこともできますがmalloc、比較すると不器用で困難です(そして、例外を安全にしようとすると、それははるかに不器用で困難になります-std::vector以前にほとんど再発明している点まであなたは終わった)。

于 2013-05-17T04:18:01.680 に答える