Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Ralat kompilasi C++: Takrif jenis tempatan tidak sah, apakah yang perlu saya lakukan?

Ralat kompilasi C++: Takrif jenis tempatan tidak sah, apakah yang perlu saya lakukan?

WBOY
WBOYasal
2023-08-21 22:19:481328semak imbas

Dalam proses pengaturcaraan C++, ralat kompilasi sering ditemui, dan ralat ini boleh menjadi sangat mengelirukan. Artikel ini terutamanya akan membincangkan ralat kompilasi C++: "Takrifan jenis tempatan tidak sah, apakah yang perlu saya lakukan

Dalam program C++, kita selalunya perlu menentukan jenis dalam kelas, seperti struktur?" Ini boleh dicapai dengan menggunakan kata kunci "typedef". Contohnya:

class MyClass {
public:
    typedef struct {
        int x;
        int y;
    } Point;
    Point getPoint();
};

Dalam atur cara di atas, kami menggunakan "typedef" untuk mentakrifkan struktur "Point" dan menggunakannya dalam kelas "MyClass".

Walau bagaimanapun, dalam beberapa kes, menggunakan "typedef" akan membawa kepada ralat kompilasi: "Takrif jenis tempatan tidak sah". Ralat ini biasanya disebabkan oleh penggunaan sintaks yang salah semasa menentukan jenis. Apabila menggunakan "typedef" untuk mentakrifkan struktur, anda harus menggunakan kata kunci "struct" untuk membezakannya daripada definisi kelas. Berikut ialah cara yang betul untuk menulisnya:

class MyClass {
public:
    typedef struct Point {
        int x;
        int y;
    } Point;
    Point getPoint();
};

Dalam atur cara di atas, kata kunci "struct" memberitahu pengkompil bahawa kita ingin mentakrifkan struktur, dan kata kunci "typedef" memberitahu pengkompil bahawa kita ingin menamakan struktur ini "Titik" . Dengan cara ini, kita boleh menggunakan jenis "Titik" dalam kelas. Di samping itu, kita mesti meletakkan definisi struktur ini sebelum definisi kelas untuk mengelakkan ralat penyusunan.

Selain itu, terdapat beberapa punca lain ralat "Takrifan jenis tempatan tidak sah". Berikut ialah beberapa kesilapan biasa:

  1. Menggunakan struktur atau kesatuan yang tidak dinamakan dalam kelas.
class MyClass {
public:
    struct {
        int x;
        int y;
    } Point; // 编译错误:本地类型定义无效
    Point getPoint();
};

Dalam program di atas, struktur "Titik" tidak dinamakan dan tidak boleh digunakan dalam definisi kelas. Ia sepatutnya dinamakan seperti ini:

class MyClass {
public:
    struct Point {
        int x;
        int y;
    } Point;
    Point getPoint();
};
  1. Struktur atau kesatuan dengan nama yang sama ditakrifkan dalam kelas.
class MyClass {
public:
    typedef struct {
        int x;
        int y;
    } Point;
    Point Point; // 编译错误:本地类型定义无效
    Point getPoint();
};

Dalam atur cara di atas, kami telah mentakrifkan nama yang sama untuk kedua-dua struktur dan pembolehubah, yang mengakibatkan ralat penyusunan. Mereka harus dinamakan secara berasingan:

class MyClass {
public:
    typedef struct {
        int x;
        int y;
    } Point;
    Point point;
    Point getPoint();
};
  1. Apabila menggunakan struktur atau kesatuan dalam kelas, kata kunci "struct" atau "union" tidak digunakan.
class MyClass {
public:
    typedef Point {
        int x;
        int y;
    } Point;
    Point getPoint(); // 编译错误:本地类型定义无效
};

Dalam atur cara di atas, kami tidak menggunakan kata kunci "struct" atau "union" untuk mentakrifkan struktur "Point", yang akan menyebabkan ralat kompilasi. Kata kunci "typedef" dengan sendirinya tidak membiarkan pengkompil mengetahui bahawa ini adalah struct dan bahawa sintaks yang betul harus digunakan:

class MyClass {
public:
    typedef struct {
        int x;
        int y;
    } Point;
    Point getPoint();
};

Secara ringkasnya, ralat kompilasi C++ "Takrif jenis tempatan tidak sah" biasanya disebabkan oleh penggunaan sintaks yang salah , atau dalam kelas Disebabkan oleh takrif dalaman struktur atau kesatuan yang tidak dinamakan, dsb. Dengan menggunakan kata kunci "typedef" dan "struct" dengan betul, kita boleh mengelakkan ralat ini.

Atas ialah kandungan terperinci Ralat kompilasi C++: Takrif jenis tempatan tidak sah, apakah yang perlu saya lakukan?. 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