我的代码出现了一个奇怪的问题(或者我可能有点生疏):以下代码:
#include <iostream>
#include <vector>
using namespace std;
typedef vector<double> vDouble;
typedef vector<int> vInt;
//Class for calculations
class CallCosts
{
CallCosts::CallCosts();
CallCosts::CallCosts(vDouble nrates(4, 0)); //Constructor
void CallCosts::setRates(vDouble sr(4, 0));
void CallCosts::getTotals(vDouble gt(4, 0), vInt minutes(4, 0));
vDouble rates(4, 0);
vDouble totals(4, 0);
};
编译器在第16行给出了错误:
CallCosts::CallCosts(vDouble nrates(4, 0)); //Constructor
错误是:''''之前的','或'''''''。'。'。
现在我很确定我没有错过;在任何地方,还有什么可能导致这个?另一个注意事项:我之前使用的是普通变量而不是typedef,并且代码工作正常,所以这可能是问题所在,但我还不确定?
提前致谢。
答案 0 :(得分:3)
您对构造函数的声明是错误的:
CallCosts::CallCosts(vDouble nrates(4, 0));
它应该是这样的:
CallCosts(const vDouble& nrates);
您通过const引用传递矢量。
定义应如下所示:
CallCosts::CallCosts(const vDouble& nrates) : rates(nrates) {}
在这里,您使用初始化列表初始化您的私有变量,并将其作为参数传递给构造函数。
答案 1 :(得分:2)
删除类声明中的CallCosts::
。
此外,CallCosts::CallCosts(vDouble nrates(4, 0));
应该是什么意思?
如果您想要一个参数类型为vDouble
的构造函数,请使用CallCosts(vDouble nrates)
。
如果要指定默认值,请执行此操作CallCosts(vDouble nrates= vDouble(4, 0));
并删除默认构造函数。