close

【不是惡夢的開始,而是再度的精進。】


這是在練習類別時遇到的問題,程式碼不長,如下

#include <iostream>
#include <cstdlib>
#include <cstring>

using namespace std;

class Cwin
{
    private:
        char id;
        char*  title;
        
    public:
        Cwin(char i = 'd',   char* text = "Defaule window"): id(i)   
                //[Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings]
        {
         
         title = new char[ strlen( text) + 1];
         strcpy(title, text);
        }
        
        ~Cwin()
        {
            delete [] title;
            cout << "解構元被呼叫了,Win" << this -> id << "被銷毀了.." << endl;
        }
        
        void show()
        {
            cout << "Window " << id << "; " << title << endl;
        }
};

int main()
{
    Cwin win1('k', "主視窗~~~  Main window");   
        //[Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings]
    Cwin win2('w');  
        //[Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings]
    
    win1.show();
    win2.show();
    
    
    return 0;
}

問題就在這三個地方,因為是警告[Warning],所以編譯完成後是可以執行的,只是這個警告不修正的話,會有甚麼後果,我也不知道

我想會有這個問題,或許就是使用舊的寫法,也或許就是所謂有C風格的字串吧!

我們再回到字串與陣列的世界吧!

 

很心虛地複製一下先前文章的片段

 

字元陣列

字元型態的陣列有雙重的特性

1.它可以只是單純的字元陣列,每個元素儲存一個字元

例: char grade[5] = {'a','b','c','d','e'};

 

2.它也可以代表一個字串,字串的每個字元會儲存在不同的陣列元素中,而且在字串結束時會用
一個特殊的字串結束字元'\0',這個結束字元稱為空字串。

例: char name[11] = "Boris West";
這個幾乎可以看成 char name[11] = {'B','o','r','i','s','','W','e','s','t','\0'};

當 char name[11] = "Boris West";時,

我們也可以省去註標而寫成 char name[] = "Boris West";

另外,用指標的方式就變成 char* name = "Boris West";


問題就是...舊版的編譯器接受這種寫法,新版的編譯器似乎不怎麼認同這種的寫法,所以就出現警告囉

新版編譯器會希望我們這麼的寫,const char* name = "Boris West"; 加上這個const就沒問題了


 

 

 

.

arrow
arrow
    全站熱搜

    伊蒙‧普羅客 發表在 痞客邦 留言(43) 人氣()