0

我的代码有一个奇怪的问题(或者我有点生疏):以下代码:

#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,并且代码可以正常工作,所以这可能是问题所在,但除此之外我不确定吗?

提前致谢。

4

2 回答 2

3

您对构造函数的声明是错误的:

 CallCosts::CallCosts(vDouble nrates(4, 0));

它应该如下所示:

CallCosts(const vDouble& nrates);

你通过 const 引用传递你的向量。

定义应如下所示:

CallCosts::CallCosts(const vDouble& nrates) : rates(nrates) {}

在这里,您使用初始化列表来初始化您的私有变量,该变量作为参数传递给您的构造函数。

于 2012-12-05T13:29:37.827 回答
2

CallCosts::在类声明中删除。

另外,这CallCosts::CallCosts(vDouble nrates(4, 0));应该是什么意思?

如果您想要一个参数类型为 的构造函数vDouble,请使用CallCosts(vDouble nrates). 如果要指定默认值,请执行此操作CallCosts(vDouble nrates= vDouble(4, 0));并删除默认构造函数。

于 2012-12-05T13:25:29.700 回答