C ++找不到兼容的标准构造函数

时间:2013-10-29 11:36:51

标签: c++ class vector constructor

我在头文件中创建了以下类:

class clsJoinFeeder
{
public:
    vector<vector<float>>&Floats;
    vector<vector<unsigned char>>&UnsignedChars;
};

我还没有使用这个课程(以避免任何其他错误)。

编译器告诉我“找不到兼容的构造函数”。

为什么编译器会告诉我这个?我不想使用构造函数。我的班级只是为了保留这些价值观。

2 个答案:

答案 0 :(得分:3)

您的类不包含任何数据值,它保存对具有数据值的(外部)容器的引用。引用的必须用某些东西进行初始化,因为在构造对象之后它们的指针不能被改变(如果在构造函数中没有指定对象,它们将变得无用)。

如果您想要一个数据类,您可能应该在不使用引用的情况下定义它:

class clsJoinFeeder
{
public:
    vector<vector<float> > Floats;
    vector<vector<unsigned char> > UnsignedChars;
};

如果需要引用,则必须定义构造函数初始化它们:

class clsJoinFeeder
{
public:
    vector<vector<float> > &Floats;
    vector<vector<unsigned char> > &UnsignedChars;

    clsJoinFeeder(         
        vector<vector<float> > &Floats0,
        vector<vector<unsigned char> > &UnsignedChars0
    ) : Floats(Floats0), UnsignedChars(UnsignedChars0) 
    { /*or maybe some code here*/ }
};

答案 1 :(得分:0)

该类包含两个对向量的引用。但是向哪个载体?要创建该类的实例,您需要一种方法来初始化引用以指向一些真实对象。

由于您没有自己声明构造函数,编译器会尝试生成默认构造函数。这失败了,因为它不知道如何初始化引用。