C++:试图将类作为类成员导入到另一个类中,但复制不正确

标签 c++

感谢所有回复我之前帖子的人。我想解决这个简单程序的问题。我正在尝试将一个类作为成员对象导入到另一个类中。但是,该程序的输出令人困惑。作为代码测试,我输出包含在第一类对象中的标量。这行得通。然后我输出包含在作为第二类成员的对象中的标量,这输出零。我认为出了点问题。有人可以阐明这个问题吗?谢谢!

#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/

相关文章:

c++ - 列表容器中的迭代器

c++ - 如何在 linux 中对文件执行位操作?

c++ - 返回导致内存泄漏的 wchar_t 数组

c++ - 将 std::vector emplace_back() 与 std::pair 与构造函数初始化列表一起使用

c# - 为什么有些语言更喜欢静态方法绑定(bind)而不是动态方法绑定(bind)?

c++11 : given f(const X&) and f(X&&), 我们需要 f(X&) 吗?

c++ - AudioConverterNew 返回 -50

c++ - 有没有办法手动组织 COM 编码(marshal)处理?

c++ - Visual Studio 2012 项目中的 tesseract Remove_Reference 模糊符号

c++ - C++ 中方法的 const 和非 const 版本之间的区别