2013-03-20 126 views
-2

我想实现的模板类myQueue中(逻辑结构为环形缓冲区):为什么我得到错误c2512:没有合适的默认构造函数可用?

// MyQueue.h 
#pragma once 
template<typename T> 
class MyQueue 
{ 
public: 
    /* interface */ 
    MyQueue(int sizeOfBuffer); 
    void push(const T& elem); 
    T pop(void); 

private: 
    T* m_array; 
}; 

template<typename T> 
MyQueue<T>::MyQueue(int sizeOfBuffer) 
{ 
    m_array = new T[sizeOfBuffer]; 
} 

通常当我在一个模板类面临着实现一个构造函数的我实现它的声明:

#pragma once 
template<typename T> 
class MyQueue 
{ 
public: 
    /* interface */ 
    MyQueue(int sizeOfBuffer){// do some actions with argument sizeOfBuffer}; 
    void push(const T& elem); 
    T pop(void); 

private: 
    T* m_array; 
}; 

由于构造函数的主体可以占用很多空间,我决定除了声明之外(但在相同的头文件中)实现它以使代码更具可读性
问:什么,我做错了,如何解决我的问题?

+1

你在实例化的专业化中使用了什么'T'? – 2013-03-20 21:09:53

+0

我正在使用int。 – 2013-03-20 21:10:55

+2

请出示完整的错误消息,并且还它使用代码'myQueue中' – 2013-03-20 21:12:03

回答

3

这有没有关系你怎么写你的构造体。

它与事实某处你显然试图创建该类的默认构造对象的事,但你有没有提供一个默认的构造函数。通常情况下,编译器会综合一个默认构造函数,但是由于您已经编写了一个接受参数的构造函数,因此编译器也不会(自动)执行此操作。

随着近来编译器,你应该能够得到使用= default;语法C++ 11引入合成的默认构造函数。否则,您需要明确写出一个,或者向现有的构造函数添加一个默认参数(例如,MyQueue(int sizeOfBuffer = 20);)。

+0

中构造函数ommited参数的错误感谢您的回应。问题是由于我试图在没有参数的情况下实例化T的对象。 – 2013-03-20 21:22:20

相关问题