C++ C++;底漆5ed,7_43

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

嗨,做练习的时候我有个问题。问题是: “假设我们有一个名为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 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);