我编译了非常简单的代码,但无法编译此代码。
#include <iostream>
using namespace std;
class String {
char *str;
public:
String(char *);
~String();
char *get() { return str; }
};
String::String(char *p)
{
cout << " ! constructor\n";
str = new char[strlen(p) + 1];
strcpy(str, p);
}
String::~String()
{
cout << " ! destructor\n";
delete str;
}
void show1(String &s)
{
cout << "show1 : " << s.get();
}
void show2(String s)
{
cout << "show2 : " << s.get();
}
int main()
{
char *str = "C++ Language";
String ss(str);
show1(ss); cout << endl;
show2(ss); cout << endl;
return 0;
}
错误,说不能将const char [13]转换为char *。 如何编译此代码? 我用Visual Studio编译它。
答案 0 :(得分:1)
由于您只想读取字符串,因此希望它是const。更改
String::String(char *p)
...
char *str = "C++ Language";
到
String::String(const char *p)
...
const char *str = "C++ Language";
答案 1 :(得分:1)
字符串常量是恒定的,不应修改,较早的编译器可能允许将它们分配给char *
,而更现代的编译器将仅允许分配给const char*
(或const char[]
),例如这应该编译:
const char *str = "C++ Language";
即使编译器允许分配给char *
,在尝试修改字符串文字时,也应始终使用const char*
来防止难以跟踪的崩溃。
答案 2 :(得分:-2)
为strlen和strcpy包含string.h