| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1466 人关注过本帖
标题:类对象出错
只看楼主 加入收藏
xuanzilie
Rank: 1
等 级:新手上路
帖 子:133
专家分:0
注 册:2007-7-12
收藏
 问题点数:0 回复次数:13 
类对象出错
程序代码:
#include <iostream>
using namespace std;
    class A
    {
        
    int x,y;
    public:
        A()
        {
            x = 0;
            y = 0; 
        }
        A(int i = 1, int j = 0)
        { 
            x = i;
            y = j;    
        }
        void show()
        {
            cout << x << ',' << y <<endl;
        }
    };

int main()
{
    A a1 ;                     //编译器告诉我这里call指向模糊不清,我看书上也是这么写的,哪位高手能解释一下
    A a2(3,6);
    a1.show();
    a2.show();
    return 0;
}
搜索更多相关主题的帖子: 对象 
2008-08-06 16:18
blueboy82006
Rank: 5Rank: 5
来 自:幻想世界
等 级:贵宾
威 望:16
帖 子:1227
专家分:57
注 册:2007-7-23
收藏
得分:0 
看了半天,硬是没看出有什么错误……
我也想知道啊,这样写有问题吗?

2008-08-06 17:16
xuanzilie
Rank: 1
等 级:新手上路
帖 子:133
专家分:0
注 册:2007-7-12
收藏
得分:0 
g++编译的
error: call of overload 'A()' is ambiguous
note: candidates are :A::A(int , int)
note: A::A()
2008-08-06 18:11
zerocn
Rank: 1
等 级:新手上路
帖 子:126
专家分:0
注 册:2006-4-11
收藏
得分:0 
A()
        {
            x = 0;
            y = 0;
        }
        A(int i = 1, int j = 0)
        {
            x = i;
            y = j;   
        }

这里,两个构造函数,本来构造函数是可以重载的,但是你定义的构造函数违反了重载规则
因为A(int i=1,int j=0)的参数有了缺省值,所以当定义了个对象时A obj;
编译器不知道调用的是obj.A();还是obj.A(int,int);因此出现二义性
2008-08-06 18:40
xuanzilie
Rank: 1
等 级:新手上路
帖 子:133
专家分:0
注 册:2007-7-12
收藏
得分:0 
4楼说的有理 应该就是这样,我看了看书上跟我写的确实有点不一样,谢谢了。
2008-08-06 19:15
blueboy82006
Rank: 5Rank: 5
来 自:幻想世界
等 级:贵宾
威 望:16
帖 子:1227
专家分:57
注 册:2007-7-23
收藏
得分:0 
学习了……

2008-08-06 21:33
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
收藏
得分:0 
回复 4# zerocn 的帖子
重载 不能设置初始值吗 ?
2008-08-07 11:08
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
收藏
得分:0 
回复 1# xuanzilie 的帖子
// s.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>

using namespace std;
class A
{
    int x,y;
public:
    A()
    {
        x = 0;
        y = 0;
    }
    A(int i, int j = 1)
    {
        x = i;
        y = j;   
    }
    void show()
    {
        cout << x << ',' << y <<endl;
    }
};

int main()
{
    A a1 ;
    A a2(3,6);
    a1.show();
    a2.show();
    return 0;
}
2008-08-07 11:15
zerocn
Rank: 1
等 级:新手上路
帖 子:126
专家分:0
注 册:2006-4-11
收藏
得分:0 
[bo][un]vfdff[/un] 在 2008-8-7 11:15 的发言:[/bo]

// s.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include

using namespace std;
class A
{
    int x,y;
public:
    A()
    {
        x = 0;
        y = 0;
    }
    A(int i, int j = 1)
    {
        x = ...


重载可以设置
缺省值,但不能全部都设置为缺省值(不设置默认构造函数外)。只要符合函数重载的规则都可以
2008-08-07 16:38
xzx1002002
Rank: 2
等 级:论坛游民
帖 子:68
专家分:27
注 册:2006-3-7
收藏
得分:0 
缺省值是可以设,但是以缺省的方式调用的时候,不能出现和其他函数相同的情况。

lz的程序,a1(),不知道是调用A(),A(int,int).第二个构造函数缺省的时候和第一个相同,当然不行了。
2008-08-07 17:09
快速回复:类对象出错
数据加载中...
 
   



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

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