我在头文件中创建了以下类:
class clsJoinFeeder
{
public:
vector<vector<float>>&Floats;
vector<vector<unsigned char>>&UnsignedChars;
};
我还没有使用这个类(以避免任何额外的错误)。
编译器告诉我“找不到兼容的构造函数”。
为什么编译器告诉我这个?我不想使用构造函数。我的课程只是为了保持这些价值观。
我在头文件中创建了以下类:
class clsJoinFeeder
{
public:
vector<vector<float>>&Floats;
vector<vector<unsigned char>>&UnsignedChars;
};
我还没有使用这个类(以避免任何额外的错误)。
编译器告诉我“找不到兼容的构造函数”。
为什么编译器告诉我这个?我不想使用构造函数。我的课程只是为了保持这些价值观。
您的类不包含任何数据值,它包含对具有数据值的(外部)容器的引用。引用必须用一些东西初始化,因为在对象构造之后它们的指针不能改变(如果构造函数中没有给出指针,它们就变得无用了)。
如果您想要一个保存数据的类,您可能应该在不使用引用的情况下定义它:
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*/ }
};
该类包含两个对向量的引用。但是对于哪些向量?要创建该类的实例,您需要一种方法来初始化引用以指向一些真实对象。
由于您自己没有声明构造函数,因此编译器会尝试生成默认构造函数。这失败了,因为它不知道如何初始化引用。