首頁  >  文章  >  後端開發  >  C++報錯:必須在非靜態資料成員初始化,怎麼修改?

C++報錯:必須在非靜態資料成員初始化,怎麼修改?

PHPz
PHPz原創
2023-08-22 17:45:131224瀏覽

C++報錯:必須在非靜態資料成員初始化,怎麼修改?

在C 程式設計中,當我們在定義類別的非靜態資料成員時,如果沒有在建構函式或初始化清單中對其進行初始化,就會出現以下錯誤:必須在非靜態資料成員初始化,這會導致編譯器無法為該成員分配記憶體空間,從而無法實例化該類別。

要解決這個問題,我們可以採取以下措施:

#1.在建構函式中對成員變數進行初始化

如果我們沒有在定義類別時對成員變數進行初始化,可以在構造函數中對其進行初始化,並且這種方法在某些情況下更加靈活。例如:

class Person{
public:
    Person() {
        age = 18;
        name = "Tom";
    }

private:
    int age;
    string name;
};

上述程式碼中,我們在定義Person類別時沒有對age和name成員變數進行初始化,而是在建構函式中初始化。需要注意的是,如果類別中存在多個建構函數,則所有建構函數都需要對成員變數進行初始化。

2.在成員初始化清單中進行初始化

在C 中,成員初始化清單是用來初始化類別的非靜態成員變數的一種方法。透過在建構函式名稱後面加上冒號,並將成員變數及其初始化表達式設定在建構函式後面的成員初始化清單中,可以快速且清楚地對類別中的非靜態成員變數進行初始化。例如:

class Person{
public:
    Person(): age(18), name("Tom"){}

private:
    int age;
    string name;
};

在上述程式碼中,我們使用成員初始化清單來初始化age和name成員變數。

要注意的是,如果成員變數的類型是使用者自訂的類型,則需要保證該類型有預設的建構子。否則,在使用成員初始化清單進行初始化時,編譯器將無法找到合適的建構子。

總結

C 要求在定義類別的非靜態資料成員時必須進行初始化,否則會出現必須在非靜態資料成員初始化的錯誤。為了解決這個問題,我們可以在建構函式中對成員變數進行初始化,或是使用成員初始化列表對其進行初始化。無論哪種方法,都需要確保所有成員變數都已初始化。

以上是C++報錯:必須在非靜態資料成員初始化,怎麼修改?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn