【问题标题】:Multiple constructors definitions with same name but different signatures (C++)具有相同名称但不同签名的多个构造函数定义 (C++)
【发布时间】:2011-01-24 19:34:46
【问题描述】:

使用以下代码,我在编译时不断收到错误 C2535。它抱怨已经定义或声明了一个成员函数。

Rationnel.h

...
class Rationnel
{   
public:
Rationnel(int); //Constructor
Rationnel(int,int); //Constructor
void add(const Rationnel);
...

Rationnel.cpp

...
//Constructor
Rationnel::Rationnel(int n = 1)
{
    numerateur = n;
    denominateur = 1;
}

//Constructor
Rationnel::Rationnel(int n = 1, int d = 1)
{
    numerateur = n;
    denominateur = d;
}
...

知道是什么导致了错误吗?

感谢您的宝贵时间。

【问题讨论】:

  • 您不能同时使用默认参数。如果我调用构造函数Rationnel r;编译器应该选择哪一个?
  • 您应该在帖子中指定什么是 C2535 错误。
  • 错误是:Error 1 error C2535: 'void Rationnel::__dflt_ctor_closure(void)' : member function has been defined or declared
  • 这听起来更像是一个编译器错误,而不是其他任何东西。您对这些构造函数的声明没有任何冲突

标签: c++ constructor


【解决方案1】:

如果你写Rationnel(5),你怎么知道下面哪一个会被调用?两者都可以使用,所以会发生错误。

Rationnel::Rationnel(int n = 1)
Rationnel::Rationnel(int n = 1, int d = 1)

【讨论】:

  • @PuRe_ChAoS12 - 除了拥有我曾经输入过的最烦人的名字之外,您只需取出 Rationnel::Rationell(int) 版本即可达到相同的效果。
  • 感谢 Chris Lutz,这对我也有很大帮助。
猜你喜欢
  • 1970-01-01
  • 2010-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-09
  • 1970-01-01
相关资源
最近更新 更多