注册 登录
编程论坛 C++教室

类对象出错

xuanzilie 发布于 2008-08-06 16:18, 1470 次点击
程序代码:
#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;
}
13 回复
#2
blueboy820062008-08-06 17:16
看了半天,硬是没看出有什么错误……
我也想知道啊,这样写有问题吗?
#3
xuanzilie2008-08-06 18:11
g++编译的
error: call of overload 'A()' is ambiguous
note: candidates are :A::A(int , int)
note: A::A()
#4
zerocn2008-08-06 18:40
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);因此出现二义性
#5
xuanzilie2008-08-06 19:15
4楼说的有理 应该就是这样,我看了看书上跟我写的确实有点不一样,谢谢了。
#6
blueboy820062008-08-06 21:33
学习了……
#7
vfdff2008-08-07 11:08
回复 4# zerocn 的帖子
重载 不能设置初始值吗 ?
#8
vfdff2008-08-07 11:15
回复 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;
}
#9
zerocn2008-08-07 16:38
[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 = ...


重载可以设置
缺省值,但不能全部都设置为缺省值(不设置默认构造函数外)。只要符合函数重载的规则都可以
#10
xzx10020022008-08-07 17:09
缺省值是可以设,但是以缺省的方式调用的时候,不能出现和其他函数相同的情况。

lz的程序,a1(),不知道是调用A(),A(int,int).第二个构造函数缺省的时候和第一个相同,当然不行了。
#11
vfdff2008-08-08 00:25
回复 10# xzx1002002 的帖子
恩 ,谢谢
不过那应该是链接有问题
可现在为什么连编译也没有通过?
#12
xzx10020022008-08-08 13:30
在使用缺省参数时必须记住两条规则。
第一,只有参数列表的后部参数才可是缺省的,也就是说,我们不可以在一个缺省参数后面又跟一个非缺省的参数。
第二,一旦我们开始使用缺省参数,那么这个参数后面的所有参数都必须是缺省的。(这可以从第一条中导出。)
#13
拉普兰德2008-10-05 14:57
学习...
#14
zzt_4282008-10-07 19:44
默认构造函数只能有一个,你定义了两个
1