Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menyelesaikan ralat kompilasi C++: 'class 'ClassName' tidak mempunyai pembina dengan parameter'?

Bagaimana untuk menyelesaikan ralat kompilasi C++: 'class 'ClassName' tidak mempunyai pembina dengan parameter'?

WBOY
WBOYasal
2023-08-26 08:15:32973semak imbas

解决C++编译错误:'class 'ClassName' does not have a constructor with parameters',如何解决?

Penyelesaian kepada ralat kompilasi C++: 'class 'ClassName' tidak mempunyai pembina dengan parameter', bagaimana untuk menyelesaikannya?

Apabila menulis atur cara dalam C++, kita sering menghadapi ralat kompilasi. Salah satu ralat biasa ialah "'class 'ClassName' tidak mempunyai pembina dengan parameter'", iaitu, kelas tidak mempunyai pembina dengan parameter. Ralat ini biasanya berlaku apabila kita menggunakan objek kelas dan perlu menghantar parameter kepada pembina, tetapi pembina kelas tidak menentukan versi parameter. Artikel ini menerangkan beberapa cara untuk menyelesaikan masalah ini, bersama-sama dengan contoh kod yang sepadan.

Kaedah 1: Takrifkan pembina dengan parameter

Penyelesaian yang paling langsung ialah mentakrifkan pembina dengan parameter untuk kelas ini. Dengan cara ini, apabila menginstant objek kelas ini, anda boleh menghantar parameter kepada pembina. Berikut ialah contoh:

class ClassName {
public:
  int data;

  // 默认构造函数
  ClassName() {
    data = 0;
  }

  // 带参数的构造函数
  ClassName(int value) {
    data = value;
  }
};

int main() {
  ClassName obj(10);  // 使用带参数的构造函数
  return 0;
}

Dalam contoh ini, kami mentakrifkan kelas Nama Kelas yang mengandungi ahli data data jenis int . Dengan melebihkan pembina, kami mentakrifkan pembina lalai dan pembina dengan parameter. Apabila kami membuat instantiate objek obj kelas ClassName, kami menggunakan pembina berparameter dan memberikannya parameter 10. ClassName,其中包含一个int类型的数据成员data。我们通过重载构造函数,定义了一个默认构造函数和一个带参数的构造函数。当我们实例化ClassName类的对象obj时,使用的是带参数的构造函数,并向其传递了参数10

方法二:提供默认参数

除了定义带参数的构造函数外,我们还可以在构造函数的参数列表中设置默认值,这样在实例化对象时,可以选择性地传递参数。以下是一个示例:

class ClassName {
public:
  int data;

  // 默认构造函数
  ClassName(int value = 0) {
    data = value;
  }
};

int main() {
  ClassName obj1;      // 使用默认构造函数
  ClassName obj2(10);  // 使用带参数的构造函数
  return 0;
}

在这个示例中,我们为构造函数的参数value设置了默认值0。当我们使用ClassName类实例化对象obj1时,没有传递参数,因此默认构造函数会被调用;而当实例化对象obj2时,传递了参数10,所以会调用带参数的构造函数。

方法三:使用初始化列表

另一种解决方法是使用初始化列表,在类的定义中直接初始化数据成员。以下是一个示例:

class ClassName {
public:
  int data;

  // 默认构造函数
  ClassName(int value) : data(value) {}
};

int main() {
  ClassName obj(10);  // 使用带参数的构造函数
  return 0;
}

在这个示例中,我们在带参数的构造函数中使用初始化列表来初始化数据成员data。这样,当我们实例化ClassName类的对象obj时,会直接将参数10赋值给data

Kaedah 2: Sediakan parameter lalai

Selain mentakrifkan pembina dengan parameter, kita juga boleh menetapkan nilai lalai dalam senarai parameter pembina, supaya parameter boleh diluluskan secara terpilih apabila membuat instantiat objek. Berikut ialah contoh: 🎜rrreee🎜Dalam contoh ini, kami menetapkan nilai lalai 0 untuk parameter pembina value. Apabila kami menggunakan kelas ClassName untuk menjadikan objek obj1, tiada parameter diluluskan, jadi pembina lalai akan dipanggil dan apabila objek obj2 disegerakan Apabila , parameter 10 diluluskan, jadi pembina dengan parameter akan dipanggil. 🎜🎜Kaedah 3: Gunakan senarai permulaan🎜🎜Penyelesaian lain ialah menggunakan senarai permulaan untuk memulakan ahli data secara langsung dalam takrifan kelas. Berikut ialah contoh: 🎜rrreee🎜Dalam contoh ini, kami memulakan data ahli data menggunakan senarai pemula dalam pembina berparameter. Dengan cara ini, apabila kita membuat instantiate objek obj kelas ClassName, parameter 10 akan diberikan terus kepada data kod>. 🎜🎜Dengan tiga kaedah ini, kita boleh menyelesaikan masalah 'ralat kompilasi C++: 'class 'ClassName' tidak mempunyai pembina dengan parameter''. Pilih kaedah yang sesuai mengikut keperluan sebenar supaya program dapat disusun dan berjalan dengan lancar. 🎜

Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan ralat kompilasi C++: 'class 'ClassName' tidak mempunyai pembina dengan parameter'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn