| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 847 人关注过本帖
标题:执行出错,请帮忙看下
只看楼主 加入收藏
心手2012
Rank: 2
等 级:论坛游民
帖 子:41
专家分:14
注 册:2012-3-15
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:10 
执行出错,请帮忙看下
程序代码:
#include <iostream>
using namespace std;
const size=3;
template<class T>
class vector
{
    T*v;
public:
    vector()
    {
        v=new T[size];
        for (int i=0;i<size;i++)
            v[i]=0;
    }
    vector(T *a)
    {
        for (int i=0;i<size;i++)
        {
            v[i]=a[i];
        }
    }
    T operator*(vector&y)
    {
        T sum=0;
        for (int i=0;i<size;i++)
        {
            sum+=this->v[i]*y.v[i];
        }
        return sum;
    }
};
int main()
{
   
    int x[size]={1,2,3};
    int y[size]={4,5,6};
    vector<int>v1;
    vector<int>v2;
    v1=x;
    v2=y;
    int r=v1*v2;
    cout<<r<<endl;
    return 0;
}
这是书上的一个例子,编译和组建都没问题,执行时弹出警告。我用VC6.0和VS2008都试过,可结果一样,请大家帮忙解决下!
2012-06-03 13:00
阴天盖顶
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2012-6-3
收藏
得分:0 
构造函数出错了,v在v1=x前插入断点发现v1.v下面并没有v[0]=0;v[1]=0;v[2]=0;而只有一个值,所以下面v1=x时会报错误,但是具体怎么修改构造函数,就不清楚了。。。

2012-06-03 13:59
lknight
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:37
专家分:187
注 册:2008-9-17
收藏
得分:10 
第一处:
class vector
{
public:
    T*v;
public:

第二处:
    vector<int>v1;
    vector<int>v2;
    v1.v=x;
    v2.v=y;
2012-06-03 16:20
心手2012
Rank: 2
等 级:论坛游民
帖 子:41
专家分:14
注 册:2012-3-15
收藏
得分:0 
回复 3楼 lknight
怎么说?
第二处是类型转换啊。。。
2012-06-03 19:28
ccsuxhw
Rank: 2
等 级:论坛游民
帖 子:1
专家分:10
注 册:2012-6-3
收藏
得分:10 
#include <iostream>
using namespace std;

const int size = 3;

template<class T>
class vector
{
   
public:
    T *v;
    vector()
    {
        v=new T[size];
        for (int i=0;i<size;i++)
            v[i]=0;
    }
   
    vector(T *a)
    {
        for (int i=0;i<size;i++)
        {
            v[i]=a[i];
        }
    }
   
    T operator*(vector &y)
    {
        T sum=0;
        for (int i=0;i<size;i++)
        {
            sum+=this->v[i]*y.v[i];
        }
        return sum;
    }
};
int main()
{
   
    int x[size]={1,2,3};
    int y[size]={4,5,6};
    vector<int>v1;
    vector<int>v2;
    v1.v=x;
    v2.v=y;
    int r= v1 * v2;
   
    cout<<r<<endl;
 
    system("pause");
    return 0;
}
修改后的代码, 编译通过,你仔细对照啊
2012-06-03 20:00
lknight
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:37
专家分:187
注 册:2008-9-17
收藏
得分:0 
回复 楼主 心手2012
你要是用C++标准模板库中的vector的话,为啥再自定义一个vector类呢,再说你也没加上vector的头文件啊。在你这个程序里v1是那个你写的类,x是整形数组。。。你觉得这样能直接划等号么
2012-06-03 20:38
心手2012
Rank: 2
等 级:论坛游民
帖 子:41
专家分:14
注 册:2012-3-15
收藏
得分:0 
回复 6楼 lknight
可以的,建议去看下类型转换,将其它类型转换成类时,就是这么实现的
2012-06-03 20:46
心手2012
Rank: 2
等 级:论坛游民
帖 子:41
专家分:14
注 册:2012-3-15
收藏
得分:0 
回复 5楼 ccsuxhw
我的编译器没有通过。。。
2012-06-03 20:47
心手2012
Rank: 2
等 级:论坛游民
帖 子:41
专家分:14
注 册:2012-3-15
收藏
得分:0 
回复 6楼 lknight
这里的vector只是一个普通的类而已,不是STL中的vector
2012-06-03 20:50
心手2012
Rank: 2
等 级:论坛游民
帖 子:41
专家分:14
注 册:2012-3-15
收藏
得分:0 
回复 6楼 lknight
不好意思,实践证明你是对的,我们书上可能有写错
2012-06-03 21:14
快速回复:执行出错,请帮忙看下
数据加载中...
 
   



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

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