感谢所有回复我之前帖子的人。我想解决这个简单程序的问题。我正在尝试将一个类作为成员对象导入到另一个类中。但是,该程序的输出令人困惑。作为代码测试,我输出包含在第一类对象中的标量。这行得通。然后我输出包含在作为第二类成员的对象中的标量,这输出零。我认为出了点问题。有人可以阐明这个问题吗?谢谢!
#include <iostream>
using namespace std;
typedef double* doublevec;
// This first class contains a vector and a scalar representing the size of the vector.
typedef class Structure1
{
int N;
doublevec vec;
public:
// Constructor and copy constructor.
Structure1(int Nin);
Structure1(const Structure1& structurein);
// Accessor functions:
int get_N() { return N; }
doublevec get_vec() { return vec; }
// Destructor:
~Structure1() { delete []vec; }
} Structure1;
Structure1::Structure1(int Nin)
{
N = Nin;
vec = new double [N];
for (int i = 0; i < N; i++)
{
vec[i] = i;
};
}
Structure1::Structure1(const Structure1& structurein)
{
vec = new double[structurein.N];
for(int i = 0; i < structurein.N; i++)
{
vec[i] = structurein.vec[i];
};
}
// This class just contains the first structure.
typedef class Structure2
{
Structure1 structure;
public:
// Constructor:
Structure2(const Structure1& structurein) : structure(structurein) {}
// Accessor Function:
Structure1 get_structure() { return structure; }
// Destructor:
~Structure2() {}
} Structure2;
int main (int argc, char * const argv[])
{
const int N = 100;
Structure1 structure1(N);
Structure2 structure2(structure1);
cout << structure1.get_N() << endl;
cout << structure2.get_structure().get_N();
return 0;
}
最佳答案
看起来您没有在 Structure1
的复制构造函数中设置 N
。你需要:
Structure1::Structure1(const Structure1& structurein){
N = structurein.N;
vec = new double[structurein.N];
for(int i = 0; i < structurein.N; i++) {
vec[i] = structurein.vec[i];
}
}
(此外,for 循环后不需要分号。但那是另一回事。)
编辑: 这实际上在 an answer 中提到过你的另一个问题。 ;)
关于C++:试图将类作为类成员导入到另一个类中,但复制不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/841705/