Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Ralat sintaks C++: fungsi tidak boleh dimasukkan dalam definisi kelas, bagaimana untuk menanganinya?

Ralat sintaks C++: fungsi tidak boleh dimasukkan dalam definisi kelas, bagaimana untuk menanganinya?

WBOY
WBOYasal
2023-08-21 22:16:451657semak imbas

C++ ialah bahasa pengaturcaraan berorientasikan objek, dan takrifan kelas ialah salah satu konsep terasnya. Apabila menulis kelas, kita sering menghadapi beberapa ralat sintaks, termasuk ralat yang fungsinya tidak boleh disertakan dalam definisi kelas. Jadi bagaimana kita menangani ralat sintaks ini?

  1. Analisis Sebab

Dalam bahasa C++, definisi kelas hanya boleh mengandungi pembolehubah ahli dan fungsi ahli, dan fungsi tidak boleh ditakrifkan secara langsung dalam definisi kelas. Ini kerana fungsi yang ditakrifkan dalam definisi kelas adalah fungsi ahli dan mesti dipanggil melalui contoh kelas. Fungsi yang ditakrifkan dalam definisi kelas tidak boleh menentukan contoh yang dimiliki oleh fungsi tersebut dan tidak boleh dipanggil.

Oleh itu, jika fungsi ditakrifkan dalam definisi kelas, ralat sintaks akan berlaku. Berikut ialah contoh ralat biasa untuk mentakrifkan fungsi dalam definisi kelas:

class MyClass {
private:
  int a;
  void func() { // 错误!在类定义中定义函数
    // ...
  }
public:
  // constructor, destructor, other member functions...
};
  1. Penyelesaian

Apabila ralat sintaks berlaku apabila fungsi dimasukkan dalam definisi kelas, kita boleh mengambil penyelesaian berikut:

(1 ) Tentukan dalam Fungsi dalam definisi kelas dialihkan di luar definisi kelas. Kita boleh mengalihkan definisi fungsi selepas definisi kelas dan menentukan fungsi ahli kelas. Ini akan menyelesaikan ralat. Kod yang diubah suai adalah seperti berikut:

class MyClass {
private:
  int a;
public:
  void func(); // 在类定义中声明函数
  // constructor, destructor, other member functions...
};

void MyClass::func() { // 在类定义外定义函数
  // ...
}

(2) Takrifkan fungsi sebagai fungsi statik. Dalam definisi kelas, fungsi juga boleh ditakrifkan sebagai fungsi statik Fungsi statik tergolong dalam keseluruhan kelas dan dipanggil secara langsung dengan nama kelas. Gunakan fungsi statik untuk meletakkan definisi fungsi dalam definisi kelas. Jika fungsi yang ditakrifkan dalam definisi kelas tidak perlu mengakses pembolehubah ahli kelas, tetapi hanya perlu melaksanakan beberapa fungsi khas, anda boleh cuba menggunakan fungsi statik. Berikut ialah contoh kod yang diubah suai:

class MyClass {
private:
  int a;
public:
  static void func(); // 静态函数
  // constructor, destructor, other member functions...
};

void MyClass::func() {
  // ...
}

(3) Gunakan fungsi sebaris. Fungsi sebaris ialah fungsi khas yang biasanya digunakan untuk fungsi yang perlu dipanggil dengan kerap. Definisi fungsi boleh diletakkan di dalam definisi kelas, dan kecekapan pelaksanaannya lebih tinggi. Tidak seperti fungsi statik sebelumnya, definisi fungsi sebaris boleh diletakkan di dalam definisi kelas. Berikut ialah contoh:

class MyClass {
private:
  int a;
public:
  inline void func() { // 内联函数,放在类定义内部
    // ...
  }
  // constructor, destructor, other member functions...
};

Melalui tiga kaedah di atas, kita boleh menyelesaikan ralat sintaks fungsi yang disertakan dalam definisi kelas.

  1. Ringkasan

Ia adalah ralat sintaks biasa yang fungsi tidak boleh disertakan dalam definisi kelas Sebab ralat ini ialah hanya pembolehubah ahli dan fungsi ahli boleh disertakan dalam definisi kelas. Kita boleh menyelesaikan ralat ini dengan mengalihkan definisi fungsi di luar definisi kelas, fungsi statik atau fungsi sebaris. Hanya dengan membetulkan ralat tatabahasa dengan betul anda boleh menggunakan bahasa pengaturcaraan C++ dengan lebih baik dan meningkatkan kemahiran pengaturcaraan anda.

Atas ialah kandungan terperinci Ralat sintaks C++: fungsi tidak boleh dimasukkan dalam definisi kelas, bagaimana untuk menanganinya?. 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