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

时间:2016-11-12 01:21:13

标签: c++ constructor

我真的很困惑这里的问题。 所以基本上我有一个Stock类和一个BuyOrder类。BuyOrder类将Stock类作为成员,因此它知道要购买哪个股票。创建库存时,它会获取公司名称并使用随机价格进行初始化。然后,我可以在bidPricebidQuantityStock参数中创建买单。

main我想创建一个BuyOrder数组来存储订单。然后,每次用户创建订单时,都可以存储订单。

我的第一种方法是宣布BuyOrder buyList[100]。这样,每次用户创建订单时,我都可以使用set函数来设置每个buyList[i],然后递增i。但是,当我在BuyOrder buyList[100]中声明main时。它说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();
}    

1 个答案:

答案 0 :(得分:0)

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

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