0

私を助けてください、私は過去2〜3時間これをやろうとしてきましたが、すべてうまくいきません. input.txt の形式で多数の文字列が送られてきます

string1 string2
string3 string4 
etc.

最初は空の std::set に入れたいと思います。入ってきた文字列に番号を付け、重複を追跡するためにセットに入れたいので、再度番号を付けることはありません。初期化しようとしてstd::set<std::string> inGraphいますが、うまくいきません。0 からtot_linesstd::set<std::string> inGraph(0, tot_lines);は、入力から取得すると予想される文字列の合計数の範囲です。次のような空の攪拌ですべてを初期化しようとしましstd::set<std::string> inGraph(tot_lines, "");たが、失敗しました。これが私が今持っているものです:

struct StringInt {
    std::string name;  // associate name and number for each input string
    int number;
};

int main(int argc, char* argv[]) {
int tot_lines = 100;
int icv1, icv2;
std::string vert1, vert2;
std::set<std::string> inGraph();  // this is the set I want to initialize
std::set<std::string>::iterator sit;
std::vector<StringInt> stringInts(tot_lines*2);
StringInt* si;

std::ifstream myfile2 ("input.txt");
  if (myfile2.is_open()) {      
      while(myfile2 >> vert1 >> vert2) {
          // read in input, put it in vars below
          myfile2 >> vert1 >> vert2;  

if (inGraph.find(vert1) != inGraph.end()) {
      icv1 = i++;
      si->name = vert1;
      si->number = icv1;
      inGraph.insert(vert1);
      stringInts.push_back(*si);
  }
  else {
      icv1 = si->number;
  }
  if (inGraph.find(vert2) != inGraph.end()) {
      icv2 = i++;
      si->name = vert1;
      si->number = icv2;
      inGraph.insert(vert2);
      stringInts.push_back(*si);
  }
  else {
      icv2 = si->number;
  }
}

私が受け取るエラーは次のとおりです。文字列に番号を付けることができるようにleft of '.find' must have class/struct/union、を初期化する方法を教えてください。std::set<std::string> inGraph

4

1 に答える 1

2

このエラー メッセージは、Most Vexing Parseの被害者であるためです。

std::set<std::string> inGraph();

戻り値の型が である関数宣言ですstd::set<std::string>()afterを削除しinGraphて、オブジェクト宣言にします。

于 2013-09-09T01:35:17.620 に答える