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

时间:2017-04-22 02:35:14

标签: c++ compiler-errors

我收到错误"答:没有合适的默认构造函数。"它指向的行号是我初始化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;

}

1 个答案:

答案 0 :(得分:3)

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

如果您将A的构造函数更改为以下内容,则可以使用

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