我正在试图解决这个问题,但仍然没有运气。我确信我会混淆基本的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的默认构造函数中?
答案 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?