我正在使用C ++,并尝试使用setter方法设置数组元素值。该数组是一个类私有成员:
class Boo{
private:
int *x;
public:
Boo();
~Boo();
void setX(int,int);
int getX(int);
}
Boo::Boo(){
x = new int[1];
x = 0;
}
void Boo::setX(int value, int index){
//set condition for NULL
x[index] = value;
}
int Boo::getX(int index){
if(x[index] == NULL) {cout<<"invalid index"<<end; return;}
return x[index];
}
void test(){
Boo *p = new Boo();
p->setX(12,0);
cout<<p->getX(0)<<endl;
}
我一直在尝试测试从'0'开始设置'x'的值(如test()),但它会崩溃。我想编写一个程序来运行循环计数,然后设置数组值。这可以通过这种方式实现吗?
答案 0 :(得分:0)
Boo::Boo()
{
x = new int[1];
x = 0;
}
您无法在数组中设置值,因为在使用内存初始化之后,您已在构造函数中将数组的指针设置为null。
请使用x [0] = 0;而不是x = 0;
答案 1 :(得分:0)
不要在C ++中使用new
!
在这种情况下,您应该使用std::vector<int>
。
如果您想修改代码,除非使用std::vector
,
#include <cstddef>
#include <iostream>
#include <stdexcept>
#include <memory>
using std::size_t;
class Boo {
private:
int *x;
size_t size;
size_t capacity;
public:
Boo();
~Boo();
void setX(int,size_t);
int getX(size_t);
};
Boo::Boo() : size(), capacity(1) {
this->x = new int[1];
//x = 0;//DO NOT ASSIGN NULL POINTER!!!!
}
Boo::~Boo() noexcept {
delete[] x;
}
void Boo::setX(int value, size_t index){
if(this->capacity <= index) throw std::out_of_range("Boo::setX");//YOU MUST CHECK RANGE
this->x[index] = value;
++this->size;
}
int Boo::getX(size_t index){
if(this->size <= index) throw std::out_of_range("Boo::getX");//YOU MUST CHECK RANGE
return x[index];
}
void test(){
auto p = std::make_unique<Boo>();
p->setX(12,0);
std::cout << p->getX(0) << std::endl;
}
int main(){
test();
}