指针传参的问题,请看代码
// Danjicheng.cpp : Defines the entry point for the console application.//
#include "stdafx.h"
#include "iostream.h"
#include "string.h"
/*首先定义一个动物类作为基类*/
class Dongwu
{
protected:
char* Name;
char* Aihao;
public:
Dongwu();
void SetName(char* name);
void SetAihao(char* aihao);
void xianshi();
};
Dongwu::Dongwu()
{
Name = new char[20];
Aihao = new char[20];
}
void Dongwu::SetName(char* name)
{
strcpy(Name,name);
}
void Dongwu::SetAihao(char* aihao)
{
strcpy(Aihao,aihao);
}
void Dongwu::xianshi()
{
cout<<"基类显示:"<<'\t';
cout<<"动物类中,一个名为:"<<Name<<"的未知的动物,爱好:"<<Aihao<<'\n';
}
/*创建一个继承与动物类的 狗类 Dog类*/
class Dog:public Dongwu
{
protected:
int* Age;
public:
Dog();
void DogAge(int* age);
void Dogxianshi();
~Dog();
};
void Dog::Dogxianshi()
{
cout<<"Dog中显示"<<'\t';
cout<<"狗类中,一个名为:"<<Name<<"的狗,平时喜欢:"<<Aihao<<"今年:"<<Age<<"岁了"<<'\n';
}
void Dog::DogAge(int* age)
{
Age = age;
}
Dog::Dog()
{
Age = new int[1];
Name = new char[20];
Aihao = new char[20];
}
Dog::~Dog()
{
}
int main(int argc, char* argv[])
{
Dog dog;
dog.SetName("皮皮");
dog.SetAihao("咬人");
dog.DogAge(20);//此处有错误,肯定是传参的时候出现了问题,求教帮助!!!!!!!!!!!!!!
dog.xianshi();
dog.Dogxianshi();
}
提示错误如下:
--------------------Configuration: Danjicheng - Win32 Debug--------------------
Compiling...
Danjicheng.cpp
D:\.net程序\Danjicheng\Danjicheng.cpp(75) : error C2664: 'DogAge' : cannot convert parameter 1 from 'const int' to 'int *'
Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
D:\.net程序\Danjicheng\Danjicheng.cpp(78) : warning C4508: 'main' : function should return a value; 'void' return type assumed
Error executing cl.exe.
Danjicheng.exe - 1 error(s), 1 warning(s)
dog.DogAge((int*)20);
或
int aa = 20;
dog.DogAge(&aa); // 具体怎么写还要看代码的用处...
修改以上错误后编译就没问题了。其他的还要靠自己呀[em03] 编译的确没问题了,可是获取的是地址。
不过还是谢谢你,毕竟知道了。 晓得解决方案了,多谢前辈指点,在 cout<<"狗类中,一个名为:"<<Name<<"的狗,平时喜欢:"<<Aihao<<"今年:"<<*Age<<"岁了"<<'\n';加个 * 就没问题了,感激不尽! 呵呵,我可不是什么高手啊,只是喜欢编程罢了[em01] dog.DogAge(20);// 参数必须是一个指针,你应该这样写:
dog.DogAge((int*)20);
三楼这种做法我用DEV_CPP虽然可以运行,但是却是出错的,
用你下面那种好
int aa = 20;
dog.DogAge(&aa); // 具体怎么写还要看代码的用处... 错误原因是内存的非法访问....无月怎么这样弄 - - [code]
class Dog:public Dongwu
{
protected:
int Age;
public:
Dog();
void DogAge(int age);
void Dogxianshi();
~Dog();
};
void Dog::DogAge(int age)
{
Age = age;
}
Dog::Dog()
{
//Age = new int[1]; 不要,没用。
Name = new char[20];
Aihao = new char[20];
}
[/code]
还有,最后请在析构函数中加上delete []. 8#
内存的非法访问指的是 Age = age 吗? #include "iostream.h"
#include "string.h"
/*首先定义一个动物类作为基类*/
class Dongwu
{
protected:
char* Name;
char* Aihao;
public:
Dongwu();
~Dongwu();
void SetName(char* name);
void SetAihao(char* aihao);
void xianshi();
};
Dongwu::Dongwu()
{
Name=new char[20];
Aihao=new char[20];
}
Dongwu::~Dongwu() [color=SeaGreen]//注意要回收动态创建的空间[/color]
{
delete [] Name;
delete [] Aihao;
}
void Dongwu::SetName(char* name)
{
strcpy(Name,name);
}
void Dongwu::SetAihao(char* aihao)
{
strcpy(Aihao,aihao);
}
void Dongwu::xianshi()
{
cout<<"基类显示:"<<'\t';
cout<<"动物类中,一个名为:"<<Name<<"的未知的动物,爱好:"<<Aihao<<'\n';
}
/*创建一个继承与动物类的 狗类 Dog类*/
class Dog:public Dongwu
{
protected:
int* Age;
public:
Dog();
~Dog();
void DogAge(int* age);
void Dogxianshi();
};
Dog::Dog()
{
Age=new int; [color=SeaGreen]//这里是这样子[/color]
Name=new char[20];
Aihao=new char[20];
}
Dog::~Dog() [color=SeaGreen]//注意要回收动态创建的空间[/color]
{
delete Age;
}
void Dog::DogAge(int* age)
{
*Age=*age; [color=SeaGreen]//这里是这样子[/color]
}
void Dog::Dogxianshi()
{
cout<<"Dog中显示"<<'\t';
cout<<"狗类中,一个名为:"<<Name<<"的狗,平时喜欢:"<<Aihao<<"今年:"<<*Age<<"岁了"<<'\n'; [color=SeaGreen]//这里是这样子[/color]
}
int main(int argc, char* argv[])
{
Dog dog;
dog.SetName("皮皮");
dog.SetAihao("咬人");
int a=20; [color=SeaGreen]//这里是这样子[/color]
dog.DogAge(&a); [color=SeaGreen]//这里是这样子[/color]
dog.xianshi();
dog.Dogxianshi();
return 0;
}
[bo]PS:[/bo]
皮皮真的是很长寿啊…… 多谢各位前辈不吝赐教,我受益匪浅!以后请多多关照小弟! 那个,我只是帮助解决编译的问题。至少象我那样写编译就没问题了吧[em01]
我不是说的吗,具体怎么写还要看代码的用途。我曾经就遇到象我上面那种方法写的代码
回复 10# mqh21364 的帖子
不是,我是说无月的强制转换... 你的这是类型不匹配 - - 帅哥,因为你传递的是一个常量(const型),而函数中赋值的Age是一个int * 类型,所以不允许!页:
[1]
