C ++构造函数问题

时间:2009-05-08 20:22:51

标签: c++

#include <iostream>
using namespace std;

// This first class contains a vector and a scalar representing the size of the vector.
typedef class Structure1
{
 int N;
 double* vec;
public: 
 // Constructor and copy constructor:
 Structure1(int Nin);
 Structure1(const Structure1& structurein);
 // Accessor functions:
 int get_N() { return N; }
 double* 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; }

此处发生错误:

行位置main.cpp:47:错误:没有匹配函数来调用'Structure1 :: Structure1()'

  // 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);

 return 0;
}

如果有人知道什么是错的,我们将非常感谢您的帮助。谢谢!

3 个答案:

答案 0 :(得分:7)

您需要在Structure2 ctor中使用成员初始值设定项。

Structure2(const Structure1& structurein) : structure(structurein) {}

它试图为您的Structure1成员使用默认构造函数,但没有一个。

答案 1 :(得分:1)

顺便说一句,我认为您需要修复复制构造函数:

Structure1::Structure1(const Structure1& structurein)
{
 ///!!!! Initialize N
 N = structurein.N;

 vec = new double[structurein.N];
 for(int i = 0; i < structurein.N; i++)
 {
  vec[i] = structurein.vec[i];
 };
}

答案 2 :(得分:0)

由于您已经为Structure2声明了一个构造函数,因此编译器拒绝为它创建一个默认构造函数,以便像访问此构造函数一样访问该类的成员:

  Structure2(const Structure1& structurein) { structure = structurein; }

您应该这样做:

Structure2(const Structure1& structurein) : structure(structurein) {}