#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;
}
如果有人知道什么是错的,我们将非常感谢您的帮助。谢谢!
答案 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) {}