关于CXX0030: Error: expression cannot be evaluated的问题

herocock 2008-04-17 02:13:51
小弟C++初学者,最近在练一个练习,遇到一个不知如何解决的问题,百度了半天也没结果。请CSDN的高手指教。
程序如下:
#include <iostream>
#include <cstdlib>
#include <cmath>
using namespace std;

class duple{
int size;
double* data;
public:
duple(int n,double* a){
size=n;
data=new double [size];
for(int i=0;i<size;i++)data[i]=a[i];
}
~duple(){delete[] data;}
duple(const duple&);
duple& operator=(const duple&);
friend duple add(const duple& t,const duple& s);
void print() const;
};
inline duple::duple(const duple &t){
size=t.size;
data=new double [size];//此处出错 CXX0030: Error: expression cannot be evaluated
for(int i=0;i<size;i++)data[i]=t.data[i];
}
inline duple& duple::operator =(const duple &t){
if(this!=&t)
if(size!=t.size){
delete[] data;
data=new double [size=t.size];
}
for(int i=0;i<size;i++)data[i]=t.data[i];
return *this;
}
inline duple add(const duple& t,const duple& s){
if(t.size!=s.size){
cout<<"Size of two duple class are different!";
exit(1);
}
double*a =new double [t.size];
for(int i=0;i<t.size;i++)a[i]=t.data[i]+s.data[i];
return duple(t.size,a);
}
inline void duple::print() const{
cout<<"Size = "<<size<<'\n'<<"Data = ";
for(int i=0;i<size;i++)cout<<data[i]<<'\t';
cout<<'\n';
}
int main(){
int n=10,m=5;
double* a=new double [n];
double* b=new double [n];
for(int i=0;i<n;i++){a[i]=i;b[i]=-i;}
double* c=new double [m];
for(int i=0;i<n;i++){c[i]=i;}
duple da(n,a);
duple db(n,b);
duple dc(m,c);
cout<<"duple da:\n";
da.print();
cout<<"duple db:\n";
db.print();
cout<<"duple dc:\n";
dc.print();
duple dd=da;
duple de(m,c);
//de=db;
cout<<"duple dd=da:\n";
dd.print();
cout<<"duple de(m,c);de=db:\n";
de.print();

duple ab=add(da,db);
cout<<"ab= da add db \n";
ab.print();
//duple ac=add(da,dc);

}

程序整体编译不报错,但是运行会出错,无结果。
单步调试发现在data=new double [size]处有问题。用的是VC2005,不过换了DEV编译器还是如此。
大家帮忙看看哈。谢谢了
...全文
4943 20 打赏 收藏 举报
写回复
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
stary321323 2012-08-31
  • 打赏
  • 举报
回复
学习一下
huyutao1987 2011-09-22
  • 打赏
  • 举报
回复
看看,学习,我也遇到类似的问题
qqqabc_123_xyz 2011-05-29
  • 打赏
  • 举报
回复
niu....
...
一码超神 2011-05-18
  • 打赏
  • 举报
回复
学习了,牛X,大侠
V429082274 2011-03-15
  • 打赏
  • 举报
回复
看看, 希望有用啊
xiaomike 2011-03-08
  • 打赏
  • 举报
回复
我也遇到这样的问题,还是先查查程序吧。说不准也是访问越界呢。。。。
file_shiyan 2010-11-04
  • 打赏
  • 举报
回复
看看,学习学习
nesta2001zhang 2010-09-27
  • 打赏
  • 举报
回复
暗示的法
b0304093219840720 2010-07-20
  • 打赏
  • 举报
回复
dfafasf
woshiallkilled 2009-10-14
  • 打赏
  • 举报
回复
看看得分的答案是什么
herocock 2008-04-17
  • 打赏
  • 举报
回复
原来如此啊~看来不能光靠编译器啊。
谢谢啦
erwin1984 2008-04-17
  • 打赏
  • 举报
回复
粗心所致:

int main(){ 
int n=10,m=5;
double* a=new double [n];
double* b=new double [n];
for(int i=0;i <n;i++){a[i]=i;b[i]=-i;}
double* c=new double [m];
//for(int i=0;i <n;i++){c[i]=i;} //此处内存访问越界了,导致堆栈不可预期的一些结果。
for(int i=0;i <m;i++){c[i]=i;} //应该是 i<m。
duple da(n,a);
duple db(n,b);
duple dc(m,c);
cout <<"duple da:\n";
da.print();
cout <<"duple db:\n";
db.print();
cout <<"duple dc:\n";
dc.print();
duple dd=da;
duple de(m,c);
//de=db;
cout <<"duple dd=da:\n";
dd.print();
cout <<"duple de(m,c);de=db:\n";
de.print();

duple ab=add(da,db);
cout <<"ab= da add db \n";
ab.print();
//duple ac=add(da,dc);



herocock 2008-04-17
  • 打赏
  • 举报
回复
大家注意啊,最上面那个标错位置了。错误发生的位置在4楼写出来了。因为不能修改帖子,只能在此赘述了。。。
herocock 2008-04-17
  • 打赏
  • 举报
回复
就是运行有问题。单步调试才看得到那里的问题。
size默认private,但是我在拷贝构造函数中用应该是没有问题的。
jieao111 2008-04-17
  • 打赏
  • 举报
回复
我用测试没有问题,运行有问题,你在看看是不是逻辑错误。

还有上面说过的size默认private。。你用t.size是不对的
herocock 2008-04-17
  • 打赏
  • 举报
回复
自己发的帖子居然没有修改权限。。。晕死
herocock 2008-04-17
  • 打赏
  • 举报
回复
不好意思,出错的地方标错了,在构造函数那里。
#include <iostream>
#include <cstdlib>
#include <cmath>
using namespace std;

class duple{
int size;
double* data;
public:
duple(int n,double* a){
size=n;
data=new double [size]; //此处出错 CXX0030: Error: expression cannot be evaluated
for(int i=0;i <size;i++)data[i]=a[i];
}
~duple(){delete[] data;}
duple(const duple&);
duple& operator=(const duple&);
friend duple add(const duple& t,const duple& s);
void print() const;
};
inline duple::duple(const duple &t){
size=t.size;
data=new double [size];
for(int i=0;i <size;i++)data[i]=t.data[i];
}
inline duple& duple::operator =(const duple &t){
if(this!=&t)
if(size!=t.size){
delete[] data;
data=new double [size=t.size];
}
for(int i=0;i <size;i++)data[i]=t.data[i];
return *this;
}
inline duple add(const duple& t,const duple& s){
if(t.size!=s.size){
cout < <"Size of two duple class are different!";
exit(1);
}
double*a =new double [t.size];
for(int i=0;i <t.size;i++)a[i]=t.data[i]+s.data[i];
return duple(t.size,a);
}
inline void duple::print() const{
cout < <"Size = " < <size < <'\n' < <"Data = ";
for(int i=0;i <size;i++)cout < <data[i] < <'\t';
cout < <'\n';
}
int main(){
int n=10,m=5;
double* a=new double [n];
double* b=new double [n];
for(int i=0;i <n;i++){a[i]=i;b[i]=-i;}
double* c=new double [m];
for(int i=0;i <n;i++){c[i]=i;}
duple da(n,a);
duple db(n,b);
duple dc(m,c);
cout < <"duple da:\n";
da.print();
cout < <"duple db:\n";
db.print();
cout < <"duple dc:\n";
dc.print();
duple dd=da;
duple de(m,c);
//de=db;
cout < <"duple dd=da:\n";
dd.print();
cout < <"duple de(m,c);de=db:\n";
de.print();

duple ab=add(da,db);
cout < <"ab= da add db \n";
ab.print();
//duple ac=add(da,dc);

}
jieao111 2008-04-17
  • 打赏
  • 举报
回复
红色没问题,出错是上一行
Treazy 2008-04-17
  • 打赏
  • 举报
回复

size=t.size;
size是private变量
你用t.size是不对的
tgh621 2008-04-17
  • 打赏
  • 举报
回复
把inline去掉试试
相关推荐
发帖
C++ 语言

6.3w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
帖子事件
创建了帖子
2008-04-17 02:13
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下