| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 437 人关注过本帖
标题:哪位大神能帮我看看哪里出错了
只看楼主 加入收藏
一枚废柴
Rank: 1
等 级:新手上路
帖 子:22
专家分:4
注 册:2014-2-21
结帖率:100%
收藏
 问题点数:0 回复次数:3 
哪位大神能帮我看看哪里出错了
#include<iostream>
#include<cmath>
const int k=7;
const int l=5;
using namespace std;
class Distance
{
private:
    double D[k][l];
public:
    Distance(double x[k][l]);
    void C_distance(double dis[l-1][l]);
    void getdistance(double dis[l-1][l]);
};


class Gdistance:public Distance
{
private:
    double D[k][l];
public:
    Gdistance(double x[k][l]);
    void C_gdistance(double gdis[l-1][l]);
    void getgdistance(double gdis[l-1][l]);
};
 



/*******************************************
********功能:给D[k][l]赋值
********************************************/
Distance::Distance(double x[k][l])
{
    int i,j;
    for(i=0;i<k;i++)
    {
        for(j=0;j<l;j++)
        {
            D[i][j]=x[i][j];
        }
    }
}



/*******************************************
********功能:d[k][l]的欧式距离的计算
*******************************************/
void Distance::C_distance(double dis[l-1][l])
{   
    int n;
    int i,j;   
    double s,m;
    for(j=0;j<l-1;j++)
    {
   
        for(n=j+1;n<l;n++)
        {

            s=0;
            m=0;
            for(i=0;i<k;i++)
            {
                m=D[i][j]-D[i][n];
                s+=m*m;
            }
            dis[j][n]=sqrt(s);
        }
    }
}
/*******************************************
********功能:欧式距离的输出
*******************************************/
void Distance::getdistance(double dis[l-1][l])
{  
    int i,j;
    for (i=0;i<l-1;i++)            
    {
        for(j=0;j<l;j++)        
        {
            cout<<"第"<<i+1<<"列和第"<<j+1<<"列的欧氏距离:"<<dis[i][j]<<endl;
        }
    }
}


/*******************************************
********功能:给D[k][l]赋值
********************************************/
Gdistance::Gdistance(double x[k][l])
{
    int i,j;
    for(i=0;i<k;i++)
    {
        for(j=0;j<l;j++)
        {
            D[i][j]=x[i][j];
        }
    }
}

/*******************************************
********功能:  求最小值m
********参数:  数组d[k][l]
********返回值:最小值m
*******************************************/
double getm(double d[k][l])
{
    double m=-1;
    double tmp=0;
    int i,j;
    int n;
    for(j=0;j<l-1;j++)
    {
        for(n=j+1;n<l;n++)
        {
            for(i=0;i<k;i++)
            {
                tmp=d[i][j]-d[i][n];
                if(tmp<0)
                {
                    tmp=-tmp;
                }
                if(-1 == m)
                {
                    m=tmp;
                }
                else if(tmp<m)
                {
                    m=tmp;
                }
            }
        }
    }
    return m;
}

/*******************************************
********功能:  求最大值M
********参数:  数组d[k][l]
********返回值:最大值M
*******************************************/
double getM(double d[k][l])
{
    double M=-1;
    double tmp=0;
    int i,j;
    int n;
    for(j=0;j<l-1;j++)
    {
        for(n=j+1;n<l;n++)
        {
            for(i=0;i<k;i++)
            {
                tmp=d[i][j]-d[i][n];
                if(tmp<0)
                {
                    tmp=-tmp;
                }
                if(-1 == M)
                {
                    M=tmp;
                }
                else if(tmp>M)
                {
                    M=tmp;
                }
            }
        }
    }
    return M;
}

/*******************************************
********功能:计算矩阵的灰色距离
*******************************************/
void Gdistance::C_gdistance(double gdis[l-1][l])
{
    double getm(double d[k][l]);
    double getM(double d[k][l]);
    double m,M,tmp,s;
    m=getm(D);
    M=getM(D);
    double A=m+0.5*M;
    int i,j;
    int n;
    for(j=0;j<l-1;j++)
    {
        for(n=j+1;n<l;n++)
        {
            s=0;
            gdis[j][n]=0;
            for(i=0;i<k;i++)
            {
                tmp=D[i][j]-D[i][n];
                if(tmp<0)
                {
                    tmp=-tmp;
                }
                s+=A/(tmp+0.5*M);
            }
            gdis[j][n]=s/k;
        }
    }
}

/*******************************************
********功能:矩阵灰式距离的输出
*******************************************/
void Gdistance::getgdistance(double gdis[l-1][l])
{
       int i,j;
    for (i=0;i<l-1;i++)            
    {
        for(j=0;j<l;j++)        
        {
            cout<<"第"<<i+1<<"列和第"<<j+1<<"列的灰氏距离:"<<gdis[i][j]<<endl;
        }
    }
}

/*******************************************
********功能:键盘输入一个矩阵d[k][l]
*******************************************/
void getdouble(double d[k][l])
{   
    cout<<"请输入矩阵:"<<endl;
    int i,j;
    for (i=0;i<k;i++)            //确定为第i行
    {
        for(j=0;j<l;j++)         //输入第i行,第j列的元素
        {
            cin>>d[i][j];
        }
    }
}

int main()
{
    void getdouble(double d[k][l]);
    double x[k][l];
    double dis[l-1][l],gdis[l-1][l];
    getdouble(x);
    Distance a;
    a.C_distance(dis);
    a.getdistance(dis);
     cout<<"*********************************************"<<endl;
    Gdistance b;
    b.getgdistance(gdis);
    b.C_gdistance(gdis);
    return 0;
}
搜索更多相关主题的帖子: private include public double 
2014-06-09 20:14
一枚废柴
Rank: 1
等 级:新手上路
帖 子:22
专家分:4
注 册:2014-2-21
收藏
得分:0 
修改之后为
#include<iostream>
#include<cmath>
const int k=7;
const int l=5;
using namespace std;
class Distance
{
private:
    double D[k][l];
public:
    Distance(double x[k][l]);
    void C_distance(double dis[l-1][l]);
    void getdistance(double dis[l-1][l]);
};


class Gdistance:public Distance
{
private:
    double D[k][l];
public:
    Gdistance(double x[k][l]);
    void C_gdistance(double gdis[l-1][l]);
    void getgdistance(double gdis[l-1][l]);
};
 



/*******************************************
********功能:给D[k][l]赋值
********************************************/
Distance::Distance(double x[k][l])
{
    int i,j;
    for(i=0;i<k;i++)
    {
        for(j=0;j<l;j++)
        {
            D[i][j]=x[i][j];
        }
    }
}



/*******************************************
********功能:d[k][l]的欧式距离的计算
*******************************************/
void Distance::C_distance(double dis[l-1][l])
{   
    int n;
    int i,j;   
    double s,m;
    for(j=0;j<l-1;j++)
    {
   
        for(n=j+1;n<l;n++)
        {

            s=0;
            m=0;
            for(i=0;i<k;i++)
            {
                m=D[i][j]-D[i][n];
                s+=m*m;
            }
            dis[j][n]=sqrt(s);
        }
    }
}
/*******************************************
********功能:欧式距离的输出
*******************************************/
void Distance::getdistance(double dis[l-1][l])
{  
    int i,j;
    for (i=0;i<l-1;i++)            
    {
        for(j=0;j<l;j++)        
        {
            cout<<"第"<<i+1<<"列和第"<<j+1<<"列的欧氏距离:"<<dis[i][j]<<endl;
        }
    }
}

/*******************************************
********功能:给D[k][l]赋值
********************************************/
Gdistance::Gdistance(double x[k][l])
{
    int i,j;
    for(i=0;i<k;i++)
    {
        for(j=0;j<l;j++)
        {
            D[i][j]=x[i][j];
        }
    }
}

/*******************************************
********功能:  求最小值m
********参数:  数组d[k][l]
********返回值:最小值m
*******************************************/
double getm(double d[k][l])
{
    double m=-1;
    double tmp=0;
    int i,j;
    int n;
    for(j=0;j<l-1;j++)
    {
        for(n=j+1;n<l;n++)
        {
            for(i=0;i<k;i++)
            {
                tmp=d[i][j]-d[i][n];
                if(tmp<0)
                {
                    tmp=-tmp;
                }
                if(-1 == m)
                {
                    m=tmp;
                }
                else if(tmp<m)
                {
                    m=tmp;
                }
            }
        }
    }
    return m;
}

/*******************************************
********功能:  求最大值M
********参数:  数组d[k][l]
********返回值:最大值M
*******************************************/
double getM(double d[k][l])
{
    double M=-1;
    double tmp=0;
    int i,j;
    int n;
    for(j=0;j<l-1;j++)
    {
        for(n=j+1;n<l;n++)
        {
            for(i=0;i<k;i++)
            {
                tmp=d[i][j]-d[i][n];
                if(tmp<0)
                {
                    tmp=-tmp;
                }
                if(-1 == M)
                {
                    M=tmp;
                }
                else if(tmp>M)
                {
                    M=tmp;
                }
            }
        }
    }
    return M;
}

/*******************************************
********功能:计算矩阵的灰色距离
*******************************************/
void Gdistance::C_gdistance(double gdis[l-1][l])
{
    double getm(double d[k][l]);
    double getM(double d[k][l]);
    double m,M,tmp,s;
    m=getm(D);
    M=getM(D);
    double A=m+0.5*M;
    int i,j;
    int n;
    for(j=0;j<l-1;j++)
    {
        for(n=j+1;n<l;n++)
        {
            s=0;
            gdis[j][n]=0;
            for(i=0;i<k;i++)
            {
                tmp=D[i][j]-D[i][n];
                if(tmp<0)
                {
                    tmp=-tmp;
                }
                s+=A/(tmp+0.5*M);
            }
            gdis[j][n]=s/k;
        }
    }
}

/*******************************************
********功能:矩阵灰式距离的输出
*******************************************/
void Gdistance::getgdistance(double gdis[l-1][l])
{
       int i,j;
    for (i=0;i<l-1;i++)            
    {
        for(j=0;j<l;j++)        
        {
            cout<<"第"<<i+1<<"列和第"<<j+1<<"列的灰氏距离:"<<gdis[i][j]<<endl;
        }
    }
}

/*******************************************
********功能:键盘输入一个矩阵d[k][l]
*******************************************/
void getdouble(double d[k][l])
{   
    cout<<"请输入矩阵:"<<endl;
    int i,j;
    for (i=0;i<k;i++)            //确定为第i行
    {
        for(j=0;j<l;j++)         //输入第i行,第j列的元素
        {
            cin>>d[i][j];
        }
    }
}

int main()
{
    void getdouble(double d[k][l]);
    double x[k][l];
    double dis[l-1][l],gdis[l-1][l];
    getdouble(x);
    Distance a(x);
    a.C_distance(dis);
    a.getdistance(dis);
     cout<<"*********************************************"<<endl;
    Gdistance b(x);
    b.getgdistance(gdis);
    b.C_gdistance(gdis);
    return 0;
}
错误提示为:E:\c++编程练习\distance.cpp(91) : error C2512: 'Distance' : no appropriate default constructor available
怎么破?
2014-06-09 20:53
一枚废柴
Rank: 1
等 级:新手上路
帖 子:22
专家分:4
注 册:2014-2-21
收藏
得分:0 
把class Gdistance:public Distance
{
private:
    double D[k][l];
public:
    Gdistance(double x[k][l]);
    void C_gdistance(double gdis[l-1][l]);
    void getgdistance(double gdis[l-1][l]);
};
 变成class Gdistance:public Distance
{
private:
    double D[k][l];
public:
    Gdistance(double x[k][l]):Distance(x);
    void C_gdistance(double gdis[l-1][l]);
    void getgdistance(double gdis[l-1][l]);
};
再把Gdistance::Gdistance(double x[k][l])
{
    int i,j;
    for(i=0;i<k;i++)
    {
        for(j=0;j<l;j++)
        {
            D[i][j]=x[i][j];
        }
    }
}
变成Gdistance::Gdistance(double x[k][l]):Distance(x)
{
    int i,j;
    for(i=0;i<k;i++)
    {
        for(j=0;j<l;j++)
        {
            D[i][j]=x[i][j];
        }
    }
}
出现的错误为E:\c++编程练习\distance.cpp(22) : error C2969: syntax error : ';' : expected member function definition to end with '}'
接下来该怎么改?
2014-06-09 21:01
一枚废柴
Rank: 1
等 级:新手上路
帖 子:22
专家分:4
注 册:2014-2-21
收藏
得分:0 
好吧,当我自娱自乐,错误已经纠正了,感兴趣的可以看一下:
#include<iostream>
#include<cmath>
const int k=7;
const int l=5;
using namespace std;
class Distance
{
private:
    double D[k][l];
public:
    Distance(double x[k][l]);
    void C_distance(double dis[l-1][l]);
    void getdistance(double dis[l-1][l]);
};


class Gdistance:public Distance
{
private:
    double D[k][l];
public:
    Gdistance(double x[k][l]);
    void C_gdistance(double gdis[l-1][l]);
    void getgdistance(double gdis[l-1][l]);
};
 



/*******************************************
********功能:给D[k][l]赋值
********************************************/
Distance::Distance(double x[k][l])
{
    int i,j;
    for(i=0;i<k;i++)
    {
        for(j=0;j<l;j++)
        {
            D[i][j]=x[i][j];
        }
    }
}



/*******************************************
********功能:d[k][l]的欧式距离的计算
*******************************************/
void Distance::C_distance(double dis[l-1][l])
{   
    int n;
    int i,j;   
    double s,m;
    for(j=0;j<l-1;j++)
    {
   
        for(n=j+1;n<l;n++)
        {

            s=0;
            m=0;
            for(i=0;i<k;i++)
            {
                m=D[i][j]-D[i][n];
                s+=m*m;
            }
            dis[j][n]=sqrt(s);
        }
    }
}
/*******************************************
********功能:欧式距离的输出
*******************************************/
void Distance::getdistance(double dis[l-1][l])
{  
    int i,j;
    for (i=0;i<l-1;i++)            
    {
        for(j=0;j<l;j++)        
        {
            cout<<"第"<<i+1<<"列和第"<<j+1<<"列的欧氏距离:"<<dis[i][j]<<endl;
        }
    }
}

/*******************************************
********功能:给D[k][l]赋值
********************************************/
Gdistance::Gdistance(double x[k][l]):Distance(x)
{
    int i,j;
    for(i=0;i<k;i++)
    {
        for(j=0;j<l;j++)
        {
            D[i][j]=x[i][j];
        }
    }
}

/*******************************************
********功能:  求最小值m
********参数:  数组d[k][l]
********返回值:最小值m
*******************************************/
double getm(double d[k][l])
{
    double m=-1;
    double tmp=0;
    int i,j;
    int n;
    for(j=0;j<l-1;j++)
    {
        for(n=j+1;n<l;n++)
        {
            for(i=0;i<k;i++)
            {
                tmp=d[i][j]-d[i][n];
                if(tmp<0)
                {
                    tmp=-tmp;
                }
                if(-1 == m)
                {
                    m=tmp;
                }
                else if(tmp<m)
                {
                    m=tmp;
                }
            }
        }
    }
    return m;
}

/*******************************************
********功能:  求最大值M
********参数:  数组d[k][l]
********返回值:最大值M
*******************************************/
double getM(double d[k][l])
{
    double M=-1;
    double tmp=0;
    int i,j;
    int n;
    for(j=0;j<l-1;j++)
    {
        for(n=j+1;n<l;n++)
        {
            for(i=0;i<k;i++)
            {
                tmp=d[i][j]-d[i][n];
                if(tmp<0)
                {
                    tmp=-tmp;
                }
                if(-1 == M)
                {
                    M=tmp;
                }
                else if(tmp>M)
                {
                    M=tmp;
                }
            }
        }
    }
    return M;
}

/*******************************************
********功能:计算矩阵的灰色距离
*******************************************/
void Gdistance::C_gdistance(double gdis[l-1][l])
{
    double getm(double d[k][l]);
    double getM(double d[k][l]);
    double m,M,tmp,s;
    m=getm(D);
    M=getM(D);
    double A=m+0.5*M;
    int i,j;
    int n;
    for(j=0;j<l-1;j++)
    {
        for(n=j+1;n<l;n++)
        {
            s=0;
            gdis[j][n]=0;
            for(i=0;i<k;i++)
            {
                tmp=D[i][j]-D[i][n];
                if(tmp<0)
                {
                    tmp=-tmp;
                }
                s+=A/(tmp+0.5*M);
            }
            gdis[j][n]=s/k;
        }
    }
}

/*******************************************
********功能:矩阵灰式距离的输出
*******************************************/
void Gdistance::getgdistance(double gdis[l-1][l])
{
       int i,j;
    for (i=0;i<l-1;i++)            
    {
        for(j=0;j<l;j++)        
        {
            cout<<"第"<<i+1<<"列和第"<<j+1<<"列的灰氏距离:"<<gdis[i][j]<<endl;
        }
    }
}

/*******************************************
********功能:键盘输入一个矩阵d[k][l]
*******************************************/
void getdouble(double d[k][l])
{   
    cout<<"请输入矩阵:"<<endl;
    int i,j;
    for (i=0;i<k;i++)            //确定为第i行
    {
        for(j=0;j<l;j++)         //输入第i行,第j列的元素
        {
            cin>>d[i][j];
        }
    }
}

int main()
{
    void getdouble(double d[k][l]);
    double x[k][l];
    double dis[l-1][l],gdis[l-1][l];
    getdouble(x);
    Distance a(x);
    a.C_distance(dis);
    a.getdistance(dis);
     cout<<"*********************************************"<<endl;
    Gdistance b(x);
    b.getgdistance(gdis);
    b.C_gdistance(gdis);
    return 0;
}
2014-06-09 21:32
快速回复:哪位大神能帮我看看哪里出错了
数据加载中...
 
   



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

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