如何解决数组成员的初始化程序无效
我正在尝试将类的属性指定为Stock类型的5个位置的数组,如下所示:
#include "stdio.h"
#include "string"
#include "array"
#include "./stock.h"
#ifndef WALLET_H
class Wallet {
public:
Wallet(std::string name,Stock stocks[5]) : name_(name),stocks_(stocks) {}
//! Calculate de wallet return
float wallet_return(Stock *stock);
//! Return the name of the wallet
std::string get_name();
//! Return all the stocks in the wallet
Stock* get_stocks();
private:
std::string name_;
Stock stocks_[5];
};
#endif
std::string Wallet::get_name() {
return name_;
}
Stock* Wallet::get_stocks() {
return stocks_;
}
但是我仍然收到错误invalid initializer for array member 'Stock Wallet::stocks_ [5]'
,指的是构造函数方法。
我做错了什么?
解决方法
在您的Wallet()
构造函数中,Stock stocks[5]
参数只是语法糖,编译器实际上是在传递Stock *stocks
。固定大小的数组只能通过引用或指针在参数中传递。但是您无法从指针初始化数组,这就是代码无法编译的原因。
在这种情况下,您可以通过引用传递输入数组:
class Wallet {
public:
Wallet(std::string name,Stock (&stocks)[5]) : name_(name),stocks_(stocks) {}
...
};
或者,您可以改用std::array
:
#include <array>
class Wallet {
public:
Wallet(std::string name,std::array<Stock,5> &stocks) : name_(name),stocks_(stocks) {}
...
Stock* get_stocks();
private:
...
std::array<Stock,5> stocks_;
};
#endif
Stock* Wallet::get_stocks() {
return stocks_.data();
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。