当数组作为参数传递给构造函数时,数组元素出现逻辑错误
C ++ Logic error in elements of array, while array passed as argument in constructor
问题是(参见输出),obj2元素看起来像在main方法中传递的obj2和obj1的并集。还有,为什么obj1和obj2总是以1和2开头。它们的性质和所包含的元素。我现在已经花了一整个晚上在这个问题上,它以前有其他问题:在c++程序中,传递数组在构造函数中,执行停止,无论这个问题对你来说多么微不足道。我将感激任何帮助……而不是建议复杂而有效的解决方案,可在库的c++,请尝试建议哪里我错了作为一个新手:/
衷心感谢!
//partial "integerset.h"
class IntegerSet{
public :
IntegerSet( int [] );
void insertEl(int);
void deleteEl(int); //delete is a keyword, can't be identifier
void printSet();
private :
int setArr[20];//no.s can be 1 to 20
};
//partial "integerset.cpp"
//libraries included
IntegerSet :: IntegerSet( int arr[] ){
for(int i = 0; i < 20; i++)
setArr[i] = 0; //for consistent data at start,avoid garbage
for( int i = 0; i < 20; i++){
if ( arr[i] >= 1 && arr[i] <= 20)
this->insertEl(arr[i]);
}
}
void IntegerSet :: insertEl(int item){
if ( setArr[item-1] != 1) //-1 so that 5 is checked at 4th position, etc.
setArr[item-1] = 1; //set 4th array element to 1 if item = 5
}
void IntegerSet :: deleteEl(int item){ //delete is a keyword, can't be identifier
if ( setArr[item-1] != 0 )
setArr[item-1] = 0;
}
void IntegerSet :: printSet(){
for ( int i = 0; i < 20; i++){
if( this->setArr[i] == 1)
cout<<i+1<<" "; // + 1 important so that 2 displayed at 1st position
}
}
//partial "main.cpp"
int main(){
int a[] = {9,10,15,18,19};
int b[] = {1,3,12,14,15};
IntegerSet obj1(a);
IntegerSet obj2(b);
cout<<"nintial obj1n";
obj1.printSet();
cout<<"ninitial obj2n";
obj2.printSet();
obj1.deleteEl(18);
cout<<"nafter deletion of 18 n";
obj1.printSet();
obj1.insertEl(7);
cout<<"nafter insertion of 7n";
obj1.printSet();
system("PAUSE");
return EXIT_SUCCESS;
}
//here's the output
![output of program][1]
http://tinypic.com/view.php?pic=25uiceo&s=5
您正在向构造函数传递垃圾,因为您的输入数组只包含5个元素,但您将它们作为包含20个元素的索引。
改变:
int a[] = {9,10,15,18,19};
int b[] = {1,3,12,14,15};
:
int a[20] = {9,10,15,18,19};
int b[20] = {1,3,12,14,15};
请注意,未显式初始化的元素将包含0,因此现在相当于:
int a[20] = {9,10,15,18,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int b[20] = {1,3,12,14,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
最好不要使用像20这样神奇的数字。作为构造函数参数传递,并作为类成员存储。
IntegerSet::IntegerSet( unsigned n, int data[] );
或者例如:
IntegerSet::IntegerSet( std::vector<int> &data );
如果用int[20]初始化对象很重要,则传递int[20]:
int a[20] = {9,10,15,18,19};
IntegerSet obj1(a);
请记住,C/c++中的数组名称只是一个原始指针。它不包含任何关于元素数量的信息
相关文章:
- 数组元素打印的递归方法
- strncpy之后的char数组的错误行为
- 如何将字节数组元素替换为修改的十六进制 ASCII 符号?
- 代码使用向量成功运行,但使用数组显示错误
- 为什么使用数组元素查找最大数字的程序不起作用?
- 数组元素更改值?
- 如何访问宏中定义的数组元素
- 将数组元素递增 1
- C++函数,它将数组、谓词和运算符作为参数,并将运算符应用于满足谓词的数组元素
- 存储指向动态数组元素的指针
- C++通过别名指针以静默方式将错误的类型分配给数组元素
- 在 std::map 中插入数组元素
- 使用指针访问数组元素时出现意外结果
- c++ 使用动态分配运算符反向数组元素
- 为什么在 c++ 中分配 char 数组元素时,分配的字符会被销毁?
- 缺少数组元素问题
- strlen 显示数组元素的数量错误
- 当数组作为参数传递给构造函数时,数组元素出现逻辑错误
- Codechef:从数组元素中移除成对的公共因子,并找到最小乘积.为什么回答错误
- 基于范围的for循环错误地输出了具有cout的数组元素