类构造构造函数d必须显式初始化引用成员

问题描述:

我真的在这里遇到了问题。 所以基本上我有一个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'变量)必须由类的构造函数显式初始化;如果这个类有一个默认的构造函数,那么它必须初始化它们。 –

因为你的BuyOrder类(您不向我们展示并且应该)包含引用成员(Stock &buyStock;),您必须将该引用设置为该类的任何构造函数中的某个内容。这意味着你不能使用默认的构造函数,因为它不会初始化引用。

可能的解决方案包括将buyStock更改为不作为引用,将其更改为指针(对于那些尚未表示订单的情况,可以将其更改为null),或将容器从固定大小的数组更改为可以调整大小的东西,如vector

+0

所以我改变了容器,使用'矢量',但是当我试图声明BuyStock列表[10]时,它显示了同样的错误。我已经更新了上面的代码 –