首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >类组合构造函数d必须显式初始化引用成员。

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

Stack Overflow用户
提问于 2016-11-12 01:21:13
回答 1查看 304关注 0票数 0

我真的被这里的问题困住了。基本上,我有一个Stock类和一个BuyOrder class.The 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(){},然后显示错误:Constructor for 'BuyOder'must explicitly initialize the reference member 'buyStock'

我不知道怎么从这里开始。非常感谢。

下面是BuyOrder.cpp的一部分,因为它太长了,剩下的部分只是函数定义。

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
#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

代码语言:javascript
运行
复制
#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,不包括长函数定义

代码语言:javascript
运行
复制
#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();
}    
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-12 01:45:53

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40558599

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档