2016-09-07 2 views
0

안녕하세요, 제 프로그램에 문제가 있습니다. 저는 C++을 처음 사용하고 일반 프로그래밍을 코딩하려고 합니다만, 평상시처럼 프로그램에서 많은 오류가 있습니다. 최선을 다하고 있지만 오류가 어디에 있는지 이해할 수 없습니다. 나는 합계를 취하는 add() 메서드, sum의 산술 평균을 만드는 c'tor 및 compute() 메서드를 설명하는 템플릿 클래스를 원한다. nAdd는 요소의 수입니다. 대단히 감사합니다!C++ : 템플릿 클래스의 런타임 오류

template<typename T> 
class AccumulatorMean { 
    public: 

     AccumulatorMean() : sum(0), nAdd(0), media(0) {}; 
     T add(const T& data); 
     T compute(); 
private: 
     int nAdd; 
     T sum; 
     T media; 
}; 

template <typename T> 
T& AccumulatorMean::add(const T& data) { 
    sum += data; 
    nAdd++; 
    return sum; 
} 
template <typename T> 
T& AccumulatorMean::compute() { 
    media = sum/nAdd; 
    return media; 
} 
int main() { 
    AccumulatorMean a; 
    a.add<int>(5); 
} 
+0

당신에게 좋은 정보 : 컴파일 중에 오류가 발생하면 '컴파일 타임 오류'입니다. 실제로 프로그램을 실행하면 오류가 발생합니다. 런타임 오류입니다. – Hayt

답변

1

여기에 몇 가지 오류가 있습니다

첫째 :

주 다음과 같이한다 : 당신은 클래스를 지정

int main() { 
    AccumulatorMean<int> a; 
    a.add(5); 
} 

템플릿 매개 변수를 가지고 . 따라서 클래스를 인스턴스화 할 때 추가해야합니다.

둘째 : 당신이 템플릿 PARAM와 클래스의 멤버 함수를 정의 할 때

이도 추가해야합니다 :

template <typename T> 
T AccumulatorMean<T>::add(const T& data) { 
    ... 
} 

AccumulatorMean<T>

그리고 세 번째를 참조하십시오 :

코드에서 함수의 이온은 T을 반환한다고 선언 한 동안 T&을 반환했습니다. 그것은 또한 잘못되었습니다. 이미 위 코드를 위 코드에서 변경했습니다.

+0

감사합니다. – Rjack