C ++:使用已删除的函数

时间:2017-09-21 13:46:45

标签: c++

我正在试图解决这个问题,但仍然没有运气。我确信我会混淆基本的C ++内容,所以需要你的帮助。

class TypeA {
  TypeA( const int id ) ;
  TypeA() ;
  private :
     int n_id ;
}

然后在我的班级B **。h **

class TypeB :
   TypeB( const int x , const int y ) ;
   TypeB( const int x , const int y , const TypeA& a) ;
   private :
       int _x ;
       int _y ;
       TypeA _a ; 

我在第二个构造函数上遇到问题。

的.cpp

TypeB( const int x , const int y , const TypeA& a) : _x( x) , _y(y) {
   _a = a ;
}

我收到此错误:

use of deleted function TypeA::operator=(TypeA&)
note : TypeA::operator=(TypeA&) is implicity deleted because the default definition would be ill-formed
class TypeA

关于为什么会发生这种情况的任何想法?

修改: 我试过这个:

TypeB( const int x , const int y , const TypeA& a) : _x( x) , _y(y) , _a(a) { }

现在错误变为:

use of deleted function TypeA&  _a(a)
note : TypeA is implicity deleted because the default definition would be ill-formed. 
class TypeA

这是否意味着问题会出现在我的typeA的默认构造函数中?

2 个答案:

答案 0 :(得分:2)

为TypeA类提供构造函数(如果需要,甚至是默认值)并更改类型B构造函数。请记住,默认情况下,类属性和函数是私有的

完整答案:

class TypeA {
public :
  TypeA() = default;
  ~TypeA() = default;
private :
  int n_id ;
};

class TypeB {
public :
    TypeB(const int x ,const int y);
    TypeB(const int x ,const int y ,const TypeA& a);
    ~TypeB() = default;
private :
    int _x;
    int _y;
    TypeA _a; 
};

TypeB::TypeB(const int x ,const int y ,const TypeA& a) : _x( x) , _y(y), _a(a) {
}

int main(void)
{
    TypeA test;
    TypeB hello(10, 10, test);
}

答案 1 :(得分:0)

你必须定义公共'你的构造函数!!!如果你不写“公共”,默认情况下,所有内容都是私有的:

class TypeA {
  public:  // <--- you need this!!!
  TypeA( const int id ) ;
  TypeA() ;
  private :
 int n_id ;
};

并且没有通过&#39; const int id&#39;,只有&#39; int id&#39;。 &#39; ID&#39;是通过值传递的,为什么你需要它是const?