我真的被这个问题困扰了。
所以基本上我有一个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();
}

最佳答案

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

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

10-08 11:51