2016-07-30 4 views
-1

프로그램을 실행 한 후 오류가 발생하여 문제가있는 부분을 식별 할 수 없습니다. 누구든지이 문제에 관해 조언 해 주겠습니까? transaction.h #ifndef TRANSACTION_H #DEFINE TRANSACTION_HC2280 프로그램을 실행할 때 오류가 발생했습니다.

#include <iostream> 
#include <string> 
#include <sstream> 
#include <cstring> 


using namespace std; 

class Transaction 
{ 
public: 
    Transaction(string input); 
    string getDate(); 
    string getTime(); 
    string getCondition(); 
    float getPrice(); 
    float getValue(); 
    int getVolume(); 
    void find_and_replace(string& source, string const& find, string const& replace); 

private: 
    ostringstream date; 
    ostringstream time; 
    string condition; 
    float price, value; 
    int volume, day, month, year, hour, minute; 
}; 

Transaction::Transaction(string input) { 

    find_and_replace(input, "/", " "); 
    find_and_replace(input, ":", " "); 
    find_and_replace(input, "", " "); 
    stringstream tranStream(input); 
    tranStream >> day; 
    tranStream >> month; 
    tranStream >> year; 
    tranStream >> hour; 
    tranStream >> minute; 
    tranStream >> price; 
    tranStream >> volume; 
    tranStream >> value; 
    tranStream >> condition; 

} 

string Transaction::getDate() { 
    date << day << '/' << month << '/' << year; 

    return date.str(); 
} 

string Transaction::getTime() { 
    string PlusZero; 
    if (minute < 10) { 
     PlusZero = "" + to_string(minute); 
     time << hour << ':' << PlusZero; 
    } 
    else { 

     time << hour << ':' << minute; 
    } 
    return time.str(); 
} 

float Transaction::getPrice() { 
    return price; 
} 

int Transaction::getVolume() { 
    return volume; 
} 

float Transaction::getValue() { 
    return value; 
} 

string Transaction::getCondition() { 
    return condition; 

} 

void Transaction::find_and_replace(string& source, string const& find, string const& replace) 
{ 
    for (string::size_type i = 0; (i = source.find(find, i)) != string::npos;) 
    { 
     source.replace(i, find.length(), replace); 
     i += replace.length(); 
    } 
} 

#endif // !TRANSACTION_H 

mainmenu.cpp 
#include <iostream> 
#include <string> 
#include <fstream> 
#include <vector> 
#include "Transaction.h" 

using namespace std; 

void printStock(vector<Transaction> t, int i) { 
    cout << "Date :" << t.at(i).getDate << endl; 
    cout << "Time :" << t.at(i).getTime() << endl; 
    cout << "Price : " << t.at(i).getPrice() << endl; 
    cout << "Volume : " << t.at(i).getVolume() << endl; 
    cout << "Value : " << t.at(i).getValue() << endl; 
    cout << "Condition: " << t.at(i).getCondition() << endl; 
    cout << endl; 
} 


int main() { 
    string menu; 

    vector<Transaction> TransList; 
    string a = "24/07/2015 17:00,6,67889,407334,CT"; 
    string b = "24/07/2015 17:01,5.8,144,835.2,XT"; 
    string c = "24/07/2015 17:04,0,0,0,CTXT"; 
    string d = "24/07/2015 17:10,5.78,1203,6953.34,CT"; 

    TransList.push_back(a); 
    TransList.push_back(b); 
    TransList.push_back(c); 
    TransList.push_back(d); 



    for (int i = 0; i < TransList.size(); i++) { 
    printStock(TransList, i); 
    } 

    cin >> menu; 
    return 0; 
} 

나는이 문제를 내가 벡터를 해제하는 동안 때 나타나지 않았다대로 벡터에 문제가 있음을 의심하고 각각의 결과에 대한 확인 끈. 하지만 구문 분석을 위해 읽은 데이터를 저장하는 벡터가 필요합니다. 감사합니다.

답변

0

ostringstream은 복사 할 수 없으며 클래스 내부가 두 번이므로 복사 생성자없이이 클래스를 복사 할 수 없습니다. 그러나 변경할 수 있습니다 : void printStock(vector<Transaction> t, int i) { to void printStock(vector<Transaction> & t, int i) { 및 복사하여 아니라 참조로 벡터를 전달하십시오.

push_back 대신 emplace_back을 사용하여 벡터 내부에서 직접 거래를 구성하는 것이 좋습니다. push_back을 사용하면 임시 객체를 만든 다음 move 생성자를 사용하여 벡터에 추가합니다.

그리고 또 다른 실수는 여기에 있습니다 : cout << "Date :" << t.at(i).getDate << endl;이 GETDATE()뿐만 아니라 GETDATE

+0

안녕 KIIV 있어야 큰 도움을 주셔서 감사합니다! ostringstream을 변경하고 벡터 참조를 전달하려고 시도했지만 오류가 없습니다. –

관련 문제