【问题标题】:Strange C++ syntax error with '('带有“(”的奇怪 C++ 语法错误
【发布时间】:2012-12-05 13:23:54
【问题描述】:

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

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

提前致谢。

【问题讨论】:

  • 请考虑至少阅读一些关于 C++ 的基础书籍。
  • 这不仅仅是一点点偏差,因此很难提供帮助。您不能像那样初始化 nrate 参数。或许你可以澄清一下你想要那条线的意思?
  • 到处都是'(4, 0)'是什么意思?
  • 我正在使用向量来创建数组,而 (4, 0) 是设置大小 - 我假设我做错了吗?我需要将大小调用构建到 typedef 中吗?如果没有 typedef,它看起来像:vector nrates(4, 0)
  • 您的所有成员也将是私人的。

标签: c++ class syntax header typedef


【解决方案1】:

你的构造函数声明错误:

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

应该是这样的:

CallCosts(const vDouble& nrates);

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

定义应该是这样的:

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

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

【讨论】:

  • 好的,我明白你在说什么 - 但是我该如何指定向量的长度?
  • 没关系,见下文,实际上没有必要。我对这个太累了。感谢您的回复:)
【解决方案2】:

删除类声明中的CallCosts::

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

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

【讨论】:

  • 好的,但我不是要指定默认值,而是要指定向量的大小 - 我该怎么做?
  • @user1863159 - 你不能指定大小。您可以在函数体内使用nrates.size() 检查大小。
  • 好吧,我现在很傻,因为我可以使用 push_back 将成员添加到向量中...谢谢您的帮助 :)
猜你喜欢
  • 1970-01-01
  • 2014-04-14
  • 2013-09-03
  • 2014-08-29
  • 2014-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多