C++,为什么这个函数运行到末尾会有错误,请高手指教

#include <iostream>
using namespace std;
#include<stdlib.h>
class vector
{
public:
vector(int a1,int a2,int a3,int a4)
{
v[0]=a1;
v[1]=a2;
v[2]=a3;
v[4]=a4;
}
int &operator[](int bi);
private:
int v[4];
};
int &vector::operator[](int bi)
{
if(bi<0||bi>=4)
{
cout<<"Bad subscript! \n";
exit(1);
}
return v[bi];
}
int main()
{
vector v(1,2,3,4);
cout<<v[2]<<endl;
v[3]=v[2];
cout<<v[3]<<endl;
v[2]=22;
cout<<v[2]<<endl;
cout<<"empty"<<endl;
return 1;
}

1,大哥,你定义的private: int V[4];如何能取到V[4(你看看你的构造函数)]啊?
还有,构造函数初始化都用初始化列表,你这样效果不高,不过你的数据类型是内置类型没什么影响。
2,我在编译器上DEV c++ 和 vc++6.0 运行你的程序,没错
运行结果:
3
3
22
empty
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-04-14
vector v(1,2,3,4);
cout<<v[2]<<endl; <===========这里有问题,v[2]是类的私有成员,不能直接使用
v[3]=v[2];
cout<<v[3]<<endl;
v[2]=22;
cout<<v[2]<<endl;
cout<<"empty"<<endl;
return 1;追问

已经运算符重载了不是吗

追答

重载函数并不在类里面啊~~~所以还是不能直接用的

第2个回答  2011-04-14
vector(int a1,int a2,int a3,int a4)
{
v[0]=a1;
v[1]=a2;
v[2]=a3;
v[4]=a4;
}
最后不应该是v[3]吗?不过在我的电脑上运行没错,我只是从代码中找到了你这个错误,我是在DEV C++平台下运行的。
第3个回答  2011-04-14
v[4]=a4; 这里越界了
你只定义了 int v[4];
只能使用 v[0] v[1] v[2] v[3]

vector(int a1,int a2,int a3,int a4)
{
v[0]=a1;
v[1]=a2;
v[2]=a3;
v[4]=a4; <===============这里写错了 改成 v[3]=a4; 就ok了
}
第4个回答  2011-04-14
他们说的有道理

c++ 运行出错,请高手指教!
你的代码的acc指针变量的生命域错误了吧 Account * Openanaccount::openanaccount(){ Account *acc=new Account;return acc;}函数动态创建account;这么做的话,*acc的生命域只在openanaccount()内部有效,当openanaccount()执行完毕后,acc会被释放,它所指向的地址是野地址。所以即使在opencontrol()...

为什么c++编译时总有一个错误spawning c1.exe,无论程序是对是错。换...
实际上这个问题很多情况下是由于路径设置的问题引起的,“CL.exe”是VC使用真正的编译器(编译程序),其路径在“VC根目录\\VC98\\Bin”下面,你可以到相应的路径下找到这个应用程序。因此问题可以按照以下方法解决:打开vc界面 点击VC“TOOLS(工具)”—>“Option(选择)”—>“Directories(目录)”重新...

...的时候会错,代码没有错误可是运行就错,请高手指教;
这里调用的是类体中定义的pBase,但其实您还未对其进行初始化(您只是初始化了构造函数中的那个pBase),所以才会出现错误!建议您把构造函数中的 int *pBase=new int[6];改为 pBase=new int[6];希望能帮到您!

一段C语言代码不知道错哪儿了,请高手指教
一、语法错误 所谓“语法错误”是指由于违反了语言有关语句形式或使用规则而产生的错误。比如错误地使用了关键字、遗漏了某些必需的标点符号、分支语句或循环语句不完整或不匹配等都会导致语法错误。对于语法错误,在 VB 中可以通过设置“自动语法检测”功能来发现。设置“自动语法检测”功能的方法是执行菜单...

...syntax error : ')' 本人刚学c++,求高手指教~谢谢了
我编译了一下,应该出问题的是成员不足,少了个成员和一个逗号。hWnd = CreateWindow( szWindowClass,szTitle,WS_OVERLAPPEDWINDOW,100,220,80, NULL,NULL, hInstance,NULL); 100,220,80,后面应该还有一个数。

高手请指教:系统运行时,会在几分钟或几小时后进入蓝屏,显示如下
2、内存或虚拟内存地址使用冲突造成程序的运行需要分配一定的内存地址给程序使用,当程序结束时释放留出空间让给新的程序使用,win是多任务的系统有时前程序未结束 又有新的任务开始到底要多少内存或虚拟内存来保证我们同时运行的工作任务呢?也许win在这个问题上没弄好,所以有此错误常常发生,一般运行大型软件或多媒体后...

这是一个C++二级考试的题,请高手指教一下
因此,在A中,首先先执行括号里面的语句y=z=8,得到y==8,z==8,接着执行4*6,得到24,并且该表达式返回第二个表达上的值,也就是24,因此x==24。同理可得B中,z==8,x==24,y==24 C中x==8 y==8 z==8 D中可以把.x=(y=z=8)看成是表达式1,4*6看成是表达式2,因此整个...

一个简单的C++程序,cout<<"a"<<endl;为什么会报错
GCC编译器需要包含头文件: #include <cstdlib> VC++编译器不需要包含该头文件即可使用 system;

c++变量地址的输出和setw()好像有问题,请高手指教,看看问题在什么地方...
那个setw没有问题,这个是用来控制输出宽度的,你这里设定的是setw(4);所以输出宽度为4但是这里符合右对齐的方式所以第一次输出的m跟后面的连在一起了,然后后面出现的那些乱码类的东西应该就是字符的地址

C++的阿克曼函数问题 很奇怪 高手指教~!
很正常,ACM函数的递归增长实在太快了,即使是m=4也会让程序溢出的 所以ACM函数一般都不用递归来解的,这里有点资料,你看看:http:\/\/www.programfan.com\/club\/showbbs.asp?id=171313

相似回答