我收到錯誤「A:沒有適當的默認構造函數可用。」它指向我的行號是我初始化B類的行。C++沒有合適的默認構造函數可用
我曾嘗試做類似帖子中建議的初始化列表,但它沒有解決錯誤。
該程序有很多其他功能,我爲了可讀性和簡單性的目的而剪切出來,因爲它們與錯誤無關。
我正在創建一個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;
}
沒有爲'one'和'two'沒有默認構造函數,所以你必須 –
初始化它們請發表MCVE,您的代碼使用幾個未聲明的標識符(例如'lowerThan','lowHolder') –
ctor-initializer-list是解決這個問題的正確方法,當你嘗試時出了什麼問題? –