我们应该为每个索引分配一个空字符串,然后替换 使用函数addB()中的值。 我对此很陌生,所以我遇到了很多麻烦。
class A //in a.h
{
private:
B * b;
int maxNumberOfItems;
//...
public:
A();
~A();
void addB(const B & something);
};
//in a.cpp
A::A()
{
maxNumberOfItems=10;
for(int i=0;i<maxNumberOfItems;i++)
{
b[i]="";//has to be an empty string, I am getting a segmentation fault
}
}
A::~A(){/*...*/}
//...
//in b.h
class B
{
private:
string name;
int price;
public:
void setName(string);
string getName();
void setPrice();
int getPrice(int);
B & operator=(string &);
};
//in b.cpp
B & B::operator=(string & a){name = a;price = 0; return *this;}
//...
这只是显示我的问题的程序片段
答案 0 :(得分:3)
你应该在使用动态数组之前分配内存。我已经为b
分配了内存class A //in a.h
{
private:
B * b;
int maxNumberOfItems;
//...
public:
A();
~A();
void addB(const B & something);
};
//in a.cpp
A::A()
{
maxNumberOfItems=10;
b = new B[maxNumberOfItems];
for(int i=0;i<maxNumberOfItems;i++)
{
b[i]="";//has to be an empty string, I am getting a segmentation fault
}
}
A::~A(){/*...*/}
//...
//in b.h
class B
{
private:
string name;
int price;
public:
void setName(string);
string getName();
void setPrice();
int getPrice(int);
B & operator=(string &);
};
//in b.cpp
B & B::operator=(string & a){name = a;price = 0; return *this;}
答案 1 :(得分:3)
看起来class A
应该是一个动态数组类。
创建A的新实例时,还必须为数组b
分配内存。这只是指向内存中某个点的指针。从你发布的代码中,它没有被初始化并且可以指向任何随机存储器位置 - 这是不好的(即你的段错误的可能原因)。
我建议做出以下更改。
A::A(){
maxNumberOfItems=10;
b = new B[maxNumberOfItems]; // b is an array of B objects.
// with default constructed values
// This way avoids the need for using a for loop and reassigning values
}
~A(){
if (b != NULL) { delete b; }
}
class B{
private:
//....
public:
B(): name(""), price(0) {}
// Although the default constructor without defining one should behave the same.
// This just makes it explicit. what name and price default to.
}
答案 2 :(得分:2)
maxNumberOfItems=10;
//add this line to your code
b = new B[maxNumberOfItems];
//do some error check stuff
for(int i=0;i<maxNumberOfItems;i++)
{
b[i]="";//has to be an empty string, I am getting a segmentation fault
}
你没有为b [i]分配内存,所以你得到一个段错误。