char *words[] = { "zhang", "gou", "xu", "zheng", "mao", "zhao","li", "bai", "qing" };为什么会报const char*类型的值不能用于初始化char*类型的实体的错误
时间: 2023-11-20 21:58:24 浏览: 167
在C++中,char*类型的指针可以指向一个字符串常量,但是不能将一个const char*类型的值直接赋给char*类型的指针。这是因为const char*类型的指针指向的是一个只读的字符串常量,而char*类型的指针可以修改指向的字符串内容。因此,将const char*类型的值直接赋给char*类型的指针会导致编译器报错。
对于给定的代码char *words[] = { "zhang", "gou", "xu", "zheng", "mao", "zhao","li", "bai", "qing" };其中的字符串常量是只读的,因此不能将其直接赋给char*类型的指针。如果需要修改字符串内容,应该使用char[]类型的数组来存储字符串。
相关问题
char *words[] = { "zhang", "gou", "xu", "zheng", "mao", "zhao","li", "bai", "qing" };为什么会出错
根据提供的引用内容,无法确定出错的具体原因。但是,根据提供的代码片段,我们可以猜测出错的可能原因是缺少头文件或者没有定义char类型的指针数组words。因此,我们可以在代码中添加头文件和定义char类型的指针数组words,如下所示:
```c++
#include <iostream>
using namespace std;
int main() {
char *words[] = { "zhang", "gou", "xu", "zheng", "mao", "zhao","li", "bai", "qing" };
for (int i = 0; i < 9; i++) {
cout << words[i] << endl;
}
return 0;
}
```
这段代码可以输出指针数组words中的所有元素。如果还有其他问题,请提供更多的信息。
补充完整有关类和函数ShowAnimal的定义,使得主函数能正确的执行。 裁判测试程序样例: 在这里给出函数被调用进行测试的例子。例如: #include <iostream> #include <string.h> using namespace std; class Animal{ int speed; float jpheight; char food[21]; //长度不超过十个汉字,这里可以使用数组,不必用指针 public: Animal(int s, float h, char f[]=""){ speed = s; jpheight = h; strcpy(food,f); } virtual void Show()=0; void Set(int s, float h, char f[]=""){ speed = s; jpheight = h; strcpy(food,f); } friend ostream& operator<<(ostream& o, Animal& a); }; ostream& operator<<(ostream& o, Animal& a){ o<<a.speed<<" "<<a.jpheight<<" "<<a.food; return o; } /* 请在这里填写答案 */ int main(){ Cat mao; //定义对象mao mao.Set(); //输入mao的参数 Dog gou(8, 1.3, "筒子骨", 30); //定义对象狗并初始化 ShowAnimal(mao); ShowAnimal(gou); }
在题目中,要求补充完整有关类和函数ShowAnimal的定义,使得主函数能正确的执行。因此,我们需要在代码中添加类的定义和函数的定义。根据代码中的提示,我们可以得到如下的代码:
```c++
#include <iostream>
#include <string.h>
using namespace std;
class Animal{
int speed;
float jpheight;
char food[21];
public:
Animal(int s, float h, char f[]=""){
speed = s; jpheight = h;
strcpy(food,f);
}
virtual void Show()=0;
void Set(int s, float h, char f[]=""){
speed = s; jpheight = h;
strcpy(food,f);
}
friend ostream& operator<<(ostream& o, Animal& a);
};
ostream& operator<<(ostream& o, Animal& a){
o<<a.speed<<" "<<a.jpheight<<" "<<a.food;
return o;
}
class Cat : public Animal{
public:
Cat(int s=10, float h=0.5, char f[]="鱼") : Animal(s, h, f) {}
void Show(){
cout << "猫的速度:" << speed << endl;
cout << "猫的跳跃高度:" << jpheight << endl;
cout << "猫的食物:" << food << endl;
}
};
class Dog : public Animal{
int iq;
public:
Dog(int s=20, float h=1.0, char f[]="肉", int i=50) : Animal(s, h, f), iq(i) {}
void Show(){
cout << "狗的速度:" << speed << endl;
cout << "狗的跳跃高度:" << jpheight << endl;
cout << "狗的食物:" << food << endl;
cout << "狗的智商:" << iq << endl;
}
};
void ShowAnimal(Animal& a){
cout << a << endl;
a.Show();
}
int main(){
Cat mao; //定义对象mao
mao.Set(5, 0.3, "鱼"); //输入mao的参数
Dog gou(8, 1.3, "筒子骨", 30); //定义对象狗并初始化
ShowAnimal(mao);
ShowAnimal(gou);
return 0;
}
```
在上述代码中,我们定义了两个派生类 `Cat` 和 `Dog`,它们分别从基类 `Animal` 继承。在 `Animal` 类中,我们定义了成员变量 `speed`、`jpheight` 和 `food`,并添加了构造函数、`Set` 函数、`Show` 函数和友元函数 `operator<<`。其中,`operator<<` 函数用于输出 `Animal` 对象的信息,`Show` 函数是一个虚函数,用于在派生类中显示具体信息。在 `Cat` 和 `Dog` 类中,我们分别定义了它们的构造函数,并重载了 `Show` 函数。最后,在 `main` 函数中,我们定义了两个对象 `mao` 和 `gou`,并对它们进行了初始化,然后调用了 `ShowAnimal` 函数,输出了它们的信息。
阅读全文