Slo*_*oke 7 c++ arrays parameters constructor class
我已阅读有关解决方案const A a[3] = { {0,0}, {1,1}, {2,2} },但在我的程序const中无法使用:
class Paper: public PaperQueue{
...
protected:
typedef int (Utils::*funcPtr) (int, int); //I use external function there
funcPtr p;
Utils* fptr;
public:
int pricefunc(){
addprice = (fptr->*p) (t,price);
}
Paper(int n, unsigned int pr):PaperQueue(n){
...
p=&Utils::commonpricefunc;
}
void Put(int a){
...
}
...
}
class Bank{
...
void Buy(Paper &p){
(/*this function modifies many parameters in 'p'*/)
...
}
...
}
int main(){
Bank B;
int pn=5;
/* ? */ const Paper p[pn] = {{5,15},{5,15},{5,15},{5,15},{5,15}}; /* ? */
int paperloop=0;
...
p[paperloop].Put(p[paperloop].addprice);
B.Buy(p[paperloop]);
...
Run Code Online (Sandbox Code Playgroud)
That gives me a LOT of errors(with pricefunc(),Put(),Buy(),...), or just "variable-sized object 'p’ may not be initialized". Is there any way to make this array work? (Everything works fine if not to pass any parameters to constructor!)
您不能对类(非 POD)使用初始值设定项列表,因为这会绕过对构造函数的调用。您必须将其更改为 POD 或按以下方式使用 std::vector:
如果该类是可复制的,就像它看起来的那样,您可以创建一个 std::vector 并用您想要的值填充它:
const vector<Paper> papers(5, Paper(5, 15));
Run Code Online (Sandbox Code Playgroud)
如果你想用不同的值初始化它,你可以使用初始化列表,但这仅在 C++11 中支持:
const vector<Paper> papers = {Paper(1, 1), Paper(2, 2)};
Run Code Online (Sandbox Code Playgroud)
如果没有 C++11,您必须将元素一一相加,但随后您无法使向量为 const:
vector<Paper> papers;
papers.push_back(Paper(1, 1));
papers.push_back(Paper(2, 2));
Run Code Online (Sandbox Code Playgroud)