簡體   English   中英

用參數初始化另一個類構造函數中的對象

[英]Initialize an object in another class constructor with arguments

我正在Arduino中創建一些項目。 而且,我陷入以下問題。

頭文件Bh有B類

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

然后,頭文件Ah有一個類A

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

並且,這是文件A.cppClass 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定義默認構造函數(不帶參數)。

但是,是否沒有在class A構造函數中使用參數3初始化對象b?

那么,為什么編譯器仍要使用默認構造函數?

您需要在構造函數之前初始化成員。 b成員構造函數必須在A之前調用。因此,您可以在成員外部調用它。

將類A的構造函數更改為此:

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

編輯

如果不調用初始化,則會調用默認的構造函數。 但是B類沒有默認的構造函數,這就是為什么會出錯的原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM