| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1485 人关注过本帖
标题:指针传参的问题,请看代码
只看楼主 加入收藏
冥玫怪盗
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2008-7-11
收藏
 问题点数:0 回复次数:14 
指针传参的问题,请看代码
// 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)
搜索更多相关主题的帖子: 指针 代码 
2008-07-11 20:07
冥玫怪盗
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2008-7-11
收藏
得分:0 
谢谢各位前辈了,我刚学习C++,是自学的,之前没什么基础,所以今天问题比较多,希望各位前辈可以指教,麻烦各位了,认真看看,帮帮我!我真的很喜欢学习编程,希望各位看在我很上心的份上不吝赐教!!!
2008-07-11 20:09
水中无月
Rank: 1
等 级:新手上路
帖 子:190
专家分:9
注 册:2008-6-17
收藏
得分:0 
dog.DogAge(20);// 参数必须是一个指针,你应该这样写:
dog.DogAge((int*)20);

int aa = 20;
dog.DogAge(&aa); // 具体怎么写还要看代码的用处...

修改以上错误后编译就没问题了。其他的还要靠自己呀

十里平湖霜满天,寸寸青丝愁华年,对月形单望相互,只羡鸳鸯不羡仙.
2008-07-11 20:26
冥玫怪盗
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2008-7-11
收藏
得分:0 
编译的确没问题了,可是获取的是地址。
不过还是谢谢你,毕竟知道了。
2008-07-11 20:35
冥玫怪盗
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2008-7-11
收藏
得分:0 
晓得解决方案了,多谢前辈指点,在 cout<<"狗类中,一个名为:"<<Name<<"的狗,平时喜欢:"<<Aihao<<"今年:"<<*Age<<"岁了"<<'\n';加个 * 就没问题了,感激不尽!
2008-07-11 20:37
水中无月
Rank: 1
等 级:新手上路
帖 子:190
专家分:9
注 册:2008-6-17
收藏
得分:0 
呵呵,我可不是什么高手啊,只是喜欢编程罢了

十里平湖霜满天,寸寸青丝愁华年,对月形单望相互,只羡鸳鸯不羡仙.
2008-07-11 20:50
晨曦的朝阳
Rank: 1
等 级:新手上路
帖 子:66
专家分:0
注 册:2008-1-24
收藏
得分:0 
dog.DogAge(20);// 参数必须是一个指针,你应该这样写:
dog.DogAge((int*)20);
三楼这种做法我用DEV_CPP虽然可以运行,但是却是出错的,
用你下面那种好
int aa = 20;
dog.DogAge(&aa); // 具体怎么写还要看代码的用处...
2008-07-11 21:46
中学者
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:20
帖 子:3554
专家分:80
注 册:2007-9-14
收藏
得分:0 
错误原因是内存的非法访问....无月怎么这样弄 - -

樱花大战,  有爱.
2008-07-11 22:17
mqh21364
Rank: 1
等 级:新手上路
帖 子:642
专家分:0
注 册:2008-2-28
收藏
得分:0 
程序代码:
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];
}


还有,最后请在析构函数中加上delete [].

前不见古人,后不见来者。念天地之悠悠,独怆然而涕下。
2008-07-11 23:30
mqh21364
Rank: 1
等 级:新手上路
帖 子:642
专家分:0
注 册:2008-2-28
收藏
得分:0 
8#

内存的非法访问指的是 Age = age 吗?

前不见古人,后不见来者。念天地之悠悠,独怆然而涕下。
2008-07-11 23:31
快速回复:指针传参的问题,请看代码
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017784 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved