1. 程式人生 > >無法將引數1從“const char [6]”轉換為“char *”的解決方法

無法將引數1從“const char [6]”轉換為“char *”的解決方法

        有一些C++程式在VS2017上執行會有一些錯誤,而在vc6.0中卻能執行出來。接下來的一個程式就是我在vs2017上執行出現錯誤,而在vc6.0上執行出來。但我已經通過分析vs2017上錯誤來源解決了該問題,並以此作為分享。

例項碼:

#include<iostream>

using namespace std;

class String
{
public:                                            
String() { p = NULL; }            //定義預設建構函式
String( char *str);                  //宣告建構函式
void display();
private:
char *p;                                 //字元型指標,用於指向字串
};

String::String( char *str)                //定義建構函式
{
p = str;                                  //使p指向實參字串
}
void String::display()
{
cout << p;
}

int main()
{
String string1("Helle");
String string2("Book");
string1.display(); 
cout << endl;
string2.display();
cout << endl;
return 0;

}

在vs2017執行會顯示


從vs2017顯示的錯誤中看出,把形參改為常指標的話,就可以與實參相匹配了,所以可以把源程式改如下:

#include<iostream>
#include<string>


using namespace std;


class String
{
public:
String() { p = NULL; }             //定義預設建構函式
String(const char *str);          //宣告建構函式,把形參定義成常指標
void display();
private:
const char *p;                        //定義成常物件成員,用於指向字串
};


String::String(const char *str)        //定義建構函式
{
p = str;                                   //使p指向實參字串
}
void String::display()
{
cout << p;
}


int main()
{
String string1("Helle");
String string2("Book");
string1.display(); 
cout << endl;
string2.display();
cout << endl;
return 0;

}

這樣就能在vs2017成功執行出來了