2016-11-12 110 views
0

我真的在這裏遇到了問題。 所以基本上我有一個Stock類和BuyOrder類。BuyOrder類拿Stock類作爲成員,所以它知道買哪個股票。股票創建時,它將採用公司名稱並以隨機價格進行初始化。然後我可以創建一個買入訂單,請參見bidPrice,bidQuantity,Stock參數。我想創建一個BuyOrder的數組來存儲訂單。然後每次用戶創建訂單時,都可以存儲訂單。類構造構造函數d必須顯式初始化引用成員

我的第一種方法是聲明BuyOrder buyList[100]。這樣每次用戶創建訂單時,我都可以使用設置的功能來設置每個buyList[i],然後遞增i。但是,當我在main中聲明BuyOrder buyList[100]時。它說No matching constructor for initialization of 'BuyStock buyList[100]'我回到BuyOrder.cpp嘗試添加一個默認構造函數BuyOrder::BuyOrder(){}然後它顯示錯誤:Constructor for 'BuyOder'must explicitly initialize the reference member 'buyStock'

我不知道如何從這裏開始。非常感謝。

以下是BuyOrder.cpp的一部分,因爲它太長,其餘部分只是函數定義。

BuyOrder::BuyOrder{double price, int quantity, Stock &s) 
:buyPrice{price}, 
buyQuantity{quantity}, 
buyStock{s}{} 

void BuyOrder::setBuyStock(Stock stock){ 
    buyStock = stock; 
} 

void BuyOrder::setBuyOrderPrice(double price) { 
    buyPrice = price; 
} 

void BuyOrder::setBuyOrderQuantity(int quantity) { 
    buyQuantity = quantity; 

下面是BuyOrder.h

#ifndef BUYORDER_H 
#define BUYORDER_H 
#include <ctime> 
#include<iostream> 
#include "Stock.h" 


class BuyOrder { 
    friend void getCurrentTime(); 

public: 
    BuyOrder(double , int , Stock &); 

    void setBuyStock(Stock); 
    void setBuyOrderPrice(double price); 
    void setBuyOrderQuantity(int quantity); 

    double getBuyOrderPrice(); 
    int getBuyOrderQuantity(); 

    void placeBuyOrder(); 
    void checkExcute(); 

    void modifyBuyOrder(); 
    void cancelBuyOrder(); 

    double getHighestBidPrice(); 
    int getHighestBidPriceQuantity(); 

    double getLowestBidPrice(); 
    int getLowestBidPriceQuantity(); 

private: 
    double buyPrice; 
    int buyQuantity; 
    bool excute = false; 
    Stock &buyStock; 
    time_t t; 

}; 
#endif 

這是Stock.h

#ifndef STOCK_H 
#define STOCK_H 
#include <vector> 
#include <string> 
using namespace std; 

class Stock { 

    friend void getCurrentTime(); 


public: 
    Stock(); 
    Stock(string nameOfCompany); 

    int getBidTerms(); 
    int getAskTerms(); 
    void printStockInfo(); 
    void initialize(); 
    void sortBid(); 
    void sortAsk(); 

    string nameOfCompany; 
    string currentTime; 

    vector<double> askPrice; 
    vector<int> askQuantity; 

    vector<double> bidPrice; 
    vector<int> bidQuantity; 

    int bidTerm; 
    int askTerm; 

}; 
#endif 

,這是Stock.cpp不含長函數定義

#include "Stock.h" 
#include <iostream> 
#include <vector> 
#include <time.h> 
#include <iomanip> 
#include <ctime> 
#include <random> 
#pragma warning(disable : 4996) 
using namespace std; 


void getCurrentTime() { 

    time_t rawTime; 
    struct tm * timeinfo; 

    time(&rawTime); 
    timeinfo = localtime(&rawTime); 
    cout << asctime(timeinfo); 
} 

Stock::Stock(){} 

Stock::Stock(string companyName) :nameOfCompany{ companyName } { 
    initialize(); 
    sortBid(); 
    sortAsk(); 
}  
+0

引用('T&'變量)和常量('const T'變量)必須由類的構造函數顯式初始化;如果這個類有一個默認的構造函數,那麼它必須初始化它們。 –

回答

0

因爲你的BuyOrder類(您不向我們展示並且應該)包含引用成員(Stock &buyStock;),您必須將該引用設置爲該類的任何構造函數中的某個內容。這意味着你不能使用默認的構造函數,因爲它不會初始化引用。

可能的解決方案包括將buyStock更改爲不作爲引用,將其更改爲指針(對於那些尚未表示訂單的情況,可以將其更改爲null),或將容器從固定大小的數組更改爲可以調整大小的東西,如vector

+0

所以我改變了容器,使用'矢量',但是當我試圖聲明BuyStock列表[10]時,它顯示了同樣的錯誤。我已經更新了上面的代碼 –

相關問題