2016-07-30 91 views
-1

我運行我的程序後,我遇到了錯誤c2280,我無法確定問題在哪裏。有誰會在這個問題上給我建議? 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) {void printStock(vector<Transaction> & t, int i) { 並通過引用傳遞向量而不是通過複製。

也許考慮使用emplace_back而不是push_back來構造直接在vector中的Transaction。使用push_back創建臨時對象,然後使用移動構造函數將其添加到向量中。

而另一個錯誤是在這裏: cout << "Date :" << t.at(i).getDate << endl;應該GETDATE()不只是GETDATE

+0

嗨KIIV,感謝您的幫助很大!我試圖改變ostringstream並傳遞向量引用,現在沒有發現錯誤! –

相關問題