2016-04-11 38 views
-4

ManagedFileWriter.cppC++內存初始化錯誤,而使用字符串流

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); 

} 

任何人都可以請幫我爲什麼我收到這些錯誤......

+0

您是否在'ManagedFilewriter.cpp'中加入了'ManagedFilewriter.h'? – NathanOliver

+1

@WillBriggs只是一個提示:MCVE有一個神奇的標籤:下次在你的評論中輸入'[MCVE]',它會自動擴展到** [MCVE] **。 –

回答

1

讓我們開始與ManagedFilewriter.h

我想你想要

class ManagedFilewriter 

class public 
{ 
    // ... 
} 

我不會在ManagedFileWriter.cpp文件中看到一個

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

getline()第三個參數應該是一個char而不是一個字符串。

+0

還有更多的事情需要解決。這個問題對於未來的研究是完全沒有用的。我一直是VTC。 –

1

有在你的代碼中的許多錯誤:

  • 沒有類名前提
  • 幾個語法錯誤,如類定義後分號
  • 你不能改變一個const std::string
  • std::getline需要一個字符爲定界符不是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 :: string'作爲'std :: basic_string <_CharT,_Traits,_Alloc>&std :: basic_string <_CharT,_Traits,_Alloc> ::參數的參數傳遞=(const std :: basic_string <_CharT,_Traits,_Alloc>&)[with _CharT = char,_Traits = std :: char_traits ,_Alloc = std :: allocator ]'丟棄限定符 – doe