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

标签 c++ constructor

我真的被这里的问题困住了。 所以基本上我有一个 Stock 类和一个 BuyOrder 类。BuyOrder 类将 Stock 类作为成员所以它知道要买哪只股票。创建股票时,它会输入公司名称并以随机价格进行初始化。然后我可以创建一个接受 bidPricebidQuantityStock 参数的买单。

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

我的第一种方法是声明 BuyOrder buyList[100]。这样,每次用户创建订单时,我都可以使用 set 函数来设置每个 buyList[i],然后递增 i。但是,当我在 main 中声明 BuyOrder buyList[100] 时。它说 No matching constructor for initialization of 'BuyStock buyList[100]' 我回到 BuyOrder.cpp 尝试添加默认构造函数 BuyOrder::BuyOrder( ){} 然后显示错误:“BuyOder”的构造函数必须显式初始化引用成员“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

关于c++ - 类组合构造函数 d 必须显式初始化引用成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40558599/

相关文章:

c++ - 为什么堆栈内存大小如此有限?

c# - 如何使用:base() and :this() correctly?

constructor - Go 结构构造函数中具有默认值的可选参数

java - 何时创建使用实例方法与何时传递对象引用?

c++ - 在 C++ 中使用#undef

c++ - 指针列表 C++

c++ - 在 C++ 中使用 StartService 启动服务应用程序

C++/QT - QFileDialog::getOpenFileName 过滤器 *.xml 禁用名称中包含日文字符的文件

c++ - 创建独立于构造函数参数的对象指针

javascript - 为什么我的 HTML 构造函数对象返回 [object Object] 而不是 [HTMLElementElement]?