我在头文件中创建了以下类:
class clsJoinFeeder
{
public:
vector<vector<float>>&Floats;
vector<vector<unsigned char>>&UnsignedChars;
};
我还没有使用这个课程(以避免任何其他错误)。
编译器告诉我“找不到兼容的构造函数”。
为什么编译器会告诉我这个?我不想使用构造函数。我的班级只是为了保留这些价值观。
答案 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)
该类包含两个对向量的引用。但是向哪个载体?要创建该类的实例,您需要一种方法来初始化引用以指向一些真实对象。
由于您没有自己声明构造函数,编译器会尝试生成默认构造函数。这失败了,因为它不知道如何初始化引用。