【不是惡夢的開始,而是再度的精進。】
這是在練習類別時遇到的問題,程式碼不長,如下
#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就沒問題了
.
留言列表