2016-10-18 5 views
-2

std::stack에 대한 스택 확장을 만들었습니다.Cannote 객체 생성자 오류 (객체 초기화)

template<class _StackType> 
class Stack 
{ 
    std::stack<_StackType> data_container; 
    mutable std::mutex M; 
public : 

    Stack(const Stack& other) 
    { 
     std::lock_guard<std::mutex> lock(other.M); 
     this->data_container = other.data_container; 
    } 

하지만 그것을 초기화 할 때 :

내가 코드 템플릿 클래스를 만들었습니다

는 여기

error: no matching function for call to `‘Stack<int>::Stack()’` 

그것은 것 같다

Stack<int> myStack; 

그것은 다음과 같은 오류가 발생합니다 운영자에게 몇 가지 문제가 있습니다. 연산자 오버로딩을 만들려고했으나 시도 할 때 실패했습니다.

오류의 원인은 무엇입니까?

+0

에는 운영자가 연루되지 ?? 당신은 단순히 기본 생성자를 지정하지 않았다. 복사 생성자가 정의 된 경우 컴파일러는 자동으로 생성자를 생성하지 않습니다. –

답변

3

Stack에 대한 기본 생성자를 지정하지 않았으므로 변수 myStack을 만들 수 없습니다.

일반적으로 기본 생성자는 암시 적이지만, 사용자의 경우 복사 생성자를 지정 했으므로 삭제됩니다.

은 스스로를 구현, 또는 명시 적으로 기본 다음 중 하나를

Stack() = default; // Default implementation of default constructor 
1

Stack 클래스에 기본 생성자가 없습니다.