2016-04-11 7 views
-4

ManagedFileWriter.cppC++メモリの初期化エラー、私はそれが以下のエラーを与え、これをコンパイルしようとしているときにstringstream

void ManagedFileWriter::SplitByDelimiter(const std::string& EvntRecord,const std::string EventfileDelimiter) 
{ 

    std::stringstream ss(EvntRecord); 
    std::string tokenizer; 
    while(getline(ss,tokenizer,EventfileDelimiter)) 
    { 
     mTempRecList.push_back(tokenizer); 
    } 
} 

を使用しています。

error: ‘ManagedFileWriter’ has not been declared 
error: invalid conversion from ‘void*’ to ‘char**’ 
error: cannot convert ‘std::string’ to ‘size_t*’ for argument ‘2’ to ‘__ssize_t getline(char**, size_t*, FILE*)’ 
error: ‘mTempRecList’ was not declared in this scope ManagedFilewriter.h 

class public 
    { 
     std::vector<std::string> mTempRecList; 
     virtual void SplitByDelimiter(const std::string& EvntRecord,const      std::string EventfileDelimiter="|"); 
     } 

 void accumulaterecord(const std::string& strRecord) 
     { 
      SplitByDelimiter(DwRecord,"|"); 
      for(int i=0;i<mTempRecList.size();++i); 
      cout<<mTempRecList.at(0); 
      strRecord=mTempRecList.at(0)+"|"+mTempRecList.at(3)+"|"+mTempRecList.at(4)+"|"+mTempRecList.at(5); 
mRecordList.push_back(strRecord); 

} 

に呼び出しFunctin私はこれらのエラーを取得しています、なぜ誰も私を助けてくださいすることができます...

+0

「ManagedFilewriter.h」を「ManagedFilewriter.cpp」に含めましたか? – NathanOliver

+1

@WillBriggsちょっとヒント:MCVEの魔法のタグがあります:あなたのコメントに次回は '[MCVE]'とタイプするだけで、自動的に** [MCVE] **に展開されます。 –

答えて

1

はManagedFilewriter.h

で始めることができます

私はあなたがほしいと思う私はManagedFileWriter.cppファイルに

#include <string> 
#include <sstream> 
#include "ManagedFilewriter.h" 

が表示されていないではない

class public 
{ 
    // ... 
} 

class ManagedFilewriter 

getline()第3引数は、文字列ではなくcharでなければなりません。

+0

修正する必要がさらにあります。その質問は今後の研究にはまったく役に立たない。私はVTCでした。 –

1

あなたのコード内の多くのミスはありません。

  • は何クラス名は、あなたがconst std::string
  • std::getlineとしてのcharを期待を変更することはできませんクラス定義
  • 後にセミコロンなど
  • いくつかの構文エラーを提供しました区切り記号ではないa std::string

c++を詳しく見ることをお勧めします。 ここでは、あなたのコードがすべきだと思うものの小さなスニペットです。

#include <iostream> 
#include <string> 
#include <sstream> 
#include <vector> 

using namespace std; 

class ManagedFileWriter 
{ 
public: 
    std::vector<std::string> mTempRecList; 
    virtual void SplitByDelimiter(const std::string& EvntRecord, const char EventfileDelimiter = '|'); 
}; 

void ManagedFileWriter::SplitByDelimiter(const std::string& EvntRecord, const char EventfileDelimiter) 
{ 

    std::stringstream ss(EvntRecord); 
    std::string tokenizer; 
    while (std::getline(ss, tokenizer, EventfileDelimiter)) 
    { 
    mTempRecList.push_back(tokenizer); 
    } 
} 

void accumulaterecord(std::string& strRecord) 
{ 
    ManagedFileWriter fw; 
    fw.SplitByDelimiter("foo|bar"); 
    for (auto &item : fw.mTempRecList) 
    { 
    cout << item << "\n"; 
    strRecord.append(item); 
    } 
} 

int main(void) 
{ 
    std::string recs; 
    accumulaterecord(recs); 

return 0; 
} 
+0

私はちょうどいくつかのインデックスをこのようなものを使用することができますしたいです。 strRecord = mTempRecList.at(0)+ '|' + mTempRecList.at(3)+ '|' + mTempRecList.at(4)+ '|' + mTempRecList.at(5); – doe

+0

これを行うことができます。私の例では、 'fw.mTempRecList.at(0)'などです。 'std :: vector'のサイズをチェックすることを検討してください。 – foo

+0

このエラーを取得するmessgae :: error: 'std :: basic_string <_CharT、_Traits、_Alloc>&' std :: basic_string <_CharT、_Traits、_Alloc> :: operatorの 'this'引数として 'const std :: string'を渡します。 =(const std :: basic_string <_CharT、_Traits、_Alloc>&)[_CharT = char、_Traits = std :: char_traits 、_Alloc = std :: allocator ]は修飾子を破棄します。 – doe