类构造构造函数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();
}
因为你的BuyOrder
类(您不向我们展示并且应该)包含引用成员(Stock &buyStock;
),您必须将该引用设置为该类的任何构造函数中的某个内容。这意味着你不能使用默认的构造函数,因为它不会初始化引用。
可能的解决方案包括将buyStock
更改为不作为引用,将其更改为指针(对于那些尚未表示订单的情况,可以将其更改为null),或将容器从固定大小的数组更改为可以调整大小的东西,如vector
。
所以我改变了容器,使用'矢量',但是当我试图声明BuyStock列表[10]时,它显示了同样的错误。我已经更新了上面的代码 –
引用('T&'变量)和常量('const T'变量)必须由类的构造函数显式初始化;如果这个类有一个默认的构造函数,那么它必须初始化它们。 –