2017-08-01 51 views
-2

o3(文字列からの単語を保持するベクトル)とo4 (a vector to hold those vector of words). In the if statement, once ";" has been found in the vector o3 [i] , I want to stop putting words from that o3 [i] `をo4に作成しました。 o3で保持されている次の行に進みます。 "非標準構文で '&'というメンバへのポインタを作成する際にエラーが発生しました"というエラーでコメントされた行にあります。どんな助けも高く評価されます。ありがとう!非標準構文では、メンバーC++へのポインタを作成するために '&'を使用します。

while (getline(myfile, line, (char)32)) // first read entire line into a 
              //string 
            // problem : this also reads empty lines 
           // and gives error 
            // while returning words 
    { 
     abc2.push_back(line); // inserting individual strings into a vector 
          //cout << abc[i] << "\n"; // use this to see 
          // them as a vector of lines 
          //i++; 

    } 
for (int i = 0; i < abc.size(); i++) 
    { 
     single_line = abc[i]; 
     if (((single_line[0] >= 'A') && (single_line[0] <= 'Z')) || 
     ((single_line[0] >= 'a') && (single_line[0] <= 'z'))) 
     { 

      if (abc[i] != "") 
      { 

       o3 = output_words(abc[i], (char)32); // function to separate 
                //words in a line 
       int j1 = 0; int j2 = 0; 
       while (j2 < o3.size()) 
       { 
        if (o3[j2] != "" && "\t") // *IMP* require this line to 
               // get words 
               // irrespective of spaces 
        { 
         if (o3[j2].find != ";") // ERROR 
         { 
          o4.resize(i + 1);// NO CLUE WHY IT WORKED WITH 
              // i+1 resize???!!! 
          o4[i].push_back(o3[j2]); 
          j2++; 
         } 
         else 
         { 
          j2++; 
         } 
        } 
        else 
        { 
         j2++; 
        } 
       } 

      } 


     } 
      else 
      { 
       o3 = { "" }; // o1 will be null vector (i.e will contain 
          // nothing inside) 
       o4.push_back(o3); 
      } 


     } 
+2

[mcve] – Slava

+4

を含むように質問を編集してください。おそらく 'if(o3 [j2] .find( ';')== std :: string :: npos)'またはその変形です。あなたは何を探したいのか、一度見つかった、または見つからなかったことを計画していることを説明してください。 –

+0

この質問の対象はどのように関連していますか? – Slava

答えて

1

発現o3[j2].findの結果は、名前findによってo3[j2]のメンバーです。その結果は、完全表現o3[j2].find != ";"の文字列リテラルと比較されます。

警告メッセージは、decltype(o3[j2])::findがメンバ関数であることを暗示しているようです。このコンテキストでは、メンバ関数の名前はメンバ関数ポインタに減衰します。このような暗黙的な変換は標準に従って不正ですが、コンパイラによる言語拡張としてサポートされているため、コンパイラは警告します。標準的な方法は、アドレスの演算子&を明示的に使用することです。

メンバ関数を文字列リテラルと比較することは意味がありません。代わりにメンバー関数を呼び出すことを意図している可能性があります。関数を呼び出すには、括弧で囲まれた引数リストを追加します。o3[j2].find(/* arguments */)

decltype(o3[j2])std::stringo3と宣言するのを忘れてしまった)と仮定すると、文字列リテラルとの比較も疑わしいようです。 std::string::findは、見つかった部分文字列または文字のインデックスを返します。整数を文字列リテラルと比較することは意味をなさない。私はその行が何をすべきかを熟考することをお勧めします。

関連する問題