2014-01-23 78 views
0

我在Arduino中创建了一些项目。 而且,我遇到以下问题。使用参数初始化另一个类构造函数中的对象

有一个在头文件中的B类B.h

class B { 
    private: 
    int n; 
    public: 
    B(int); 
    init(); 
} 

然后,有在头文件中A类A.h

class A { 
    private: 
    B b; 
    public: 
    A(); 
    init(); 
} 

而且,这里的文件A.cpp

Class A构造函数定义
#include <B.h> 
A::A() { 
    b(3); 
} 

这是给我的错误

../A.cpp: In constructor 'A::A()': 
../A.cpp:12: error: no matching function for call to 'B::B()' 
note: candidates are: B::B(int) 

我想,这是因为我没有在class B定义的默认构造函数(不带参数)。

但是,有没有我初始化对象b在class A构造函数与参数3?

然后,为什么编译器仍然是默认构造函数?

回答

4

您需要初始化构造函数之前的成员。必须在A之前调用b成员的构造函数,因此你可以在成员之外调用它。

更改类的构造函数这样:

#include <B.h> 
A::A():b(3) { 
} 

编辑

,如果你不调用初始化,默认构造函数被调用。但B类没有默认的构造函数,这就是为什么你有错误。

+0

哇,这工作。但请解释一下这是什么样的说法?而且,它是如何工作的。我从来没有遇到像这样的陈述。 – Akshat

+0

查看顶部的编辑 – SHR

+0

那么,这个声明有没有任何名字?你会怎么称呼它? – Akshat

相关问题