C++ C++;底漆5ed,7_43
嗨,做练习的时候我有个问题。问题是: “假设我们有一个名为NoDefault的类,该类有一个接受int的构造函数,但没有默认构造函数。请定义一个具有NoDefault类型成员的类C。定义C的默认构造函数。” 为什么C++ C++;底漆5ed,7_43,c++,C++,嗨,做练习的时候我有个问题。问题是: “假设我们有一个名为NoDefault的类,该类有一个接受int的构造函数,但没有默认构造函数。请定义一个具有NoDefault类型成员的类C。定义C的默认构造函数。” 为什么C(inti):temp(i){}不正确 错误显示: $ g++ -std=c++0x -o ex7_43 ex7_43.cpp ex7_43.cpp: In function ‘int main()’: ex7_43.cpp:16: error: no matching functi
C(inti):temp(i){}
不正确
错误显示:
$ g++ -std=c++0x -o ex7_43 ex7_43.cpp
ex7_43.cpp: In function ‘int main()’:
ex7_43.cpp:16: error: no matching function for call to ‘C::C()’
ex7_43.cpp:12: note: candidates are: C::C(int)
ex7_43.cpp:7: note: C::C(const C&)
我知道C():temp(0){}
编译find
谢谢 这个构造函数
C(int i):temp(i){}
不是类的默认构造函数。然而,在这一声明中
C c;
C():temp(0){}
C c;
要求类的默认构造函数存在。因此编译器会发出错误,因为没有默认构造函数
另一方面,这项声明
C c;
C():temp(0){}
C c;
声明可在声明中使用的默认构造函数
C c;
C():temp(0){}
C c;
根据C++标准(12.1个构造函数)< /P> 4类X的默认构造函数是 可以在没有参数的情况下调用
您可以使用参数定义默认构造函数,但本例中的参数应具有默认参数。比如说C(int i = 0):temp(i){}
上面的构造函数是默认构造函数,因为可以不带参数地调用它
练习中写着:
定义C的默认构造函数
所以你可以这样定义它
C():temp(0){}
或者
C(int i = 0):temp(i){}
或者甚至是下面的方法
class C{
private:
NoDefault temp;
public:
C(int i);
};
C::C( int i = 0 ) :temp( i ) {}
也就是说,在类之外但在main之前的构造函数定义中使用默认参数。此构造函数
C(int i):temp(i){}
不是类的默认构造函数。然而,在这一声明中
C c;
C():temp(0){}
C c;
要求类的默认构造函数存在。因此编译器会发出错误,因为没有默认构造函数
另一方面,这项声明
C c;
C():temp(0){}
C c;
声明可在声明中使用的默认构造函数
C c;
C():temp(0){}
C c;
根据C++标准(12.1个构造函数)< /P> 4类X的默认构造函数是 可以在没有参数的情况下调用
您可以使用参数定义默认构造函数,但本例中的参数应具有默认参数。比如说C(int i = 0):temp(i){}
上面的构造函数是默认构造函数,因为可以不带参数地调用它
练习中写着:
定义C的默认构造函数
所以你可以这样定义它
C():temp(0){}
或者
C(int i = 0):temp(i){}
或者甚至是下面的方法
class C{
private:
NoDefault temp;
public:
C(int i);
};
C::C( int i = 0 ) :temp( i ) {}
也就是说,在类之外但在main之前的构造函数定义中使用默认参数。您几乎拥有了它,但没有定义“C的默认构造函数”。您定义了其他构造函数。因此,就像在
NoDefault
中一样,C
没有隐含的默认构造函数,并且不能通过声明C
在main
中实例化
C() : temp(1337) {}
这就对了。您几乎拥有了它,但是您没有定义“C的默认构造函数”。您定义了其他构造函数。因此,就像在
NoDefault
中一样,C
没有隐含的默认构造函数,并且不能通过声明C
在main
中实例化
C() : temp(1337) {}
好了。你是说
C(inti):temp(i){}
?明显C(inti);temp(i){}
不会编译。在发布有关错误的问题时,始终在问题中包含实际错误,逐字、完整和未编辑。发布后您对问题进行了重大更改。更正了一个拼写错误,并在问题中包含错误消息您的意思是C(int i):temp(i){
?明显C(inti);temp(i){}
不会编译。在发布有关错误的问题时,请始终在问题中包含实际错误,逐字逐句,完整且未编辑。发布后,您对问题进行了重大更改。更正了错误,并将错误消息包含在问题中谢谢您的详细解释!这也可以在main中工作:inti=0;C(i);谢谢你的详细解释!这也可以在main中工作:inti=0;C(i);