C++ C++;没有合适的默认构造函数可用

C++ C++;没有合适的默认构造函数可用,c++,compiler-errors,C++,Compiler Errors,我得到了错误“A:没有合适的默认构造函数可用。”它指向我的行号是我初始化B类的行号 我曾经尝试过做一个初始化列表,正如在类似的帖子中所建议的那样,但它并没有解决这个错误 这个程序还有很多其他的函数,为了可读性和简单性,我删掉了这些函数,因为它们与错误无关 我正在创建一个B对象,它在构造函数中创建两个a类对象,每个对象都接收一个指向单独函数的指针 // Class A template <typename T> class A { public: // constructor

我得到了错误“A:没有合适的默认构造函数可用。”它指向我的行号是我初始化B类的行号

我曾经尝试过做一个初始化列表,正如在类似的帖子中所建议的那样,但它并没有解决这个错误

这个程序还有很多其他的函数,为了可读性和简单性,我删掉了这些函数,因为它们与错误无关

我正在创建一个B对象,它在构造函数中创建两个a类对象,每个对象都接收一个指向单独函数的指针

// Class A
template <typename T> class A   
{
public:

// constructor
A(int c, bool(*Ptr)(T, T));
};


// Class B
template <typename T> class B
{
public:
//constructor
B(int c);

A <T> oneHolder;   // Class A objects
A <T> twoHolder;

bool(*lowPtr)(T, T) = &lowerThan;           // pointer to a function
bool(*highPtr)(T, T) = &higherThan;         // pointer to a function
};

//Class A constructor
template <typename T>
A<T>::A(int c, bool(*fPtr)(T, T)) {

    m_Size = c;
    // set function pointer
    func_ptr = fPtr;

}


//B Constructor
template <typename T>
B<T>::B(int c){ // Might need initialization list, error points here

    m_Size = c;

    // Create two A objects
    A<T> one(c, lowPtr); // passing function pointer
    A<T> two(c, highPtr);


    lowHolder = one;
    highHolder = two;

}
//A类
模板类别A
{
公众:
//建造师
A(内部c,布尔(*Ptr)(T,T));
};
//B类
B类模板
{
公众:
//建造师
B(内部控制);
oneHolder;//A类对象
两人一组;
bool(*lowPtr)(T,T)=&lowerThan;//指向函数的指针
bool(*highPtr)(T,T)=&higherThan;//指向函数的指针
};
//A类构造函数
模板
A::A(int c,bool(*fPtr)(T,T)){
m_Size=c;
//设置函数指针
func_ptr=fPtr;
}
//B构装师
模板
B::B(intC){//可能需要初始化列表,错误点在这里
m_Size=c;
//创建两个A对象
一(c,lowPtr);//传递函数指针
A两个(c,高PTR);
lowHolder=1;
高持有人=两人;
}

您应该从B的构造函数调用A的构造函数。A类没有默认构造函数

如果您将A的构造函数更改为以下值,它将起作用

A(int c = 0, bool(*Ptr)(T, T) = nullptr);

对于
one
two
,没有默认构造函数,因此您必须初始化它们。请发布MCVE,您的代码使用了几个未声明的标识符(例如
低于
低持有者
),ctor初始值设定项列表是解决此问题的正确方法,当你尝试的时候出了什么问题?你能详细说明一下当你说A没有默认构造函数的时候吗?在B中,当我创建两个A对象时,它不应该调用A的构造函数吗?@Grehgous,您需要为B的成员变量的构造函数提供参数
oneHolder
twooholder
@Grehgous,例如,像这样
template B::B(int c):oneHolder(…),twooholder(…){}