2017-01-12 14 views
-1

エラー:タイプ 'char'の一時参照型の 'const &'エラー: 'char'型の一時的な型からの 'char&'型の非const参照の初期化が無効

私は多くの投稿で上記のエラーを見ていますが、私が試したすべてがそれを修正しません。

私は、次の機能があります。

vector<string> splitString(const string& str, const char& ch) 
{ 
    string next; 
    vector<string> result; 

    for (string::const_iterator it = str.begin(); it != str.end(); it++) 
    { 
     if (*it == ch) 
     { 
      if (!next.empty()) 
      { 
       result.push_back(next); 
       next.clear(); 
      } 
     } 
     else 
     { 
      next += *it; 
     } 
    } 

    if (!next.empty()) 
    { 
     result.push_back(next); 
    } 

    return result; 
} 

文字列と文字を取り、与えられた文字に基づいて文字列を分割します。私はまた、関数を呼び出すために、次のコード行を持っている:私の主な機能で自分のコード

ある

int main(int argc, char*argv[]) 
{ 
    string value = "OK,OK,OK,FAULT,OK" 
    vector<string> texts = splitString(value, ','); 

    //Do stuff with "texts" here 
} 

EDIT私は同じ機能を持っており、他の中で関数を呼び出すのと同じ方法私が書いたC++プログラムはうまく動作するので、なぜこのプログラムで動作していないのか理解できません。

ご協力いただければ幸いです。ありがとうございました

+1

を提出したすべての人に感謝し、そのことについて、このような –

+0

申し訳としてそれをタグ付けしないでください、私は思いました私はちょうどC++をクリックしました – user3307598

+0

'int main()'で始まる実際のプログラムにこれを組み込むことができますか?あなたがここに貼り付けたものは、私には大丈夫です。 – Bathsheba

答えて

0

が、私は私の機能を変更することで、エラーを解決:メインの内容を変更してみてください。興味のある方のため

、私が今持っている:

vector<string> split(std::string string, std::string del) 
{ 
    char* cstr = const_cast<char*>(string.c_str()); 
    char* current; 
    std::vector<std::string> arr; 
    current = strtok(cstr, del.c_str()); 
    while (current != NULL) 
    { 
     arr.push_back(current); 
     current = strtok(NULL, del.c_str()); 
    } 

    return arr; 
} 

これはCではない彼らの提案

+1

'c_str()'の結果に 'const'をキャストしてから、代わりに、文字列の内容を操作するには、文字列をチェックした後に '&string [0]'を使用する必要があります。 –

-2

私は文字列と文字の両方を非const参照として渡しているためだと思います。それについて移動する最良の方法はない。おそらく

const string value = "OK,OK,OK,FAULT,OK"; 
const char comma = ','; 
vector<string> texts = splitString(value, comma); 
+0

その結果、次のエラーが発生します: ''char&'の型が 'const char ' – user3307598

+0

Hm。コンパイラがこのエラー(および元のエラー)の特定の行を指していますか? – gasoline

関連する問題