2013-04-02 3 views
0

나는 템플릿 매개 변수 V와 함께 봄 클래스를 사용하려면 :컴파일 결과 템플릿 인수가 누락되었습니다. 오류가 발생합니까?

#include "Spring.hpp" 
template <typename K, typename L> 
    struct spring_value { 
     K spring_constant; 
     L spring_length; 
}; 

typedef Spring<std::vector<spring_value<double, double>>> Spring; 
typedef Spring::value value; // why struct Force does not see this? 

struct Force { 
    value v = {1.0, 2.0}; // error 
    spring_value<double,double> v = {1.0, 2.0}; // ok, but ... 
    double s = v.spring_value; // also error 

} 

Spring 클래스 :

template <typename V>    
class Spring { 

public: 
typedef V value;  

} 

그러나, 프로그램이 missing template arguments before 'v' 오류가 발생합니다. struct Force이 봄 학급에서 spring value 또는 value으로 표시되지 않는 이유는 무엇입니까?

+2

이 오류를 생성하는 작고 완벽한 * 프로그램을 제작할 수 있습니까? –

+0

두 번째 오류는 구조체를 double에 할당 할 수 없기 때문입니다. – maditya

+0

사실 그건 틀린 것입니다. 두 번째 오류는 v가 이미 spring_value이고, 스프링 값이라고도 불리는 v의 멤버를 얻으려고하기 때문에 발생합니다. 적어도 게시 한 코드에서. 그건 오타예요? – maditya

답변

2

이 컴파일조차 안 :

typedef Spring<spring_value<double, double>> Spring; 

동일한 이름을 가진 두 가지 유형을 가질 수 없습니다!

템플릿의 이름을 Spring_과 같이 바꾸거나 기본 템플릿 인수를 지정하십시오.

1

나는 질문은 이미 답을 알지만 ...

이 날 (원래 코드)에 대한 컴파일되지 않습니다 :

struct Force { 
    value v = {1.0, 2.0}; //error 
} 

을하지만,이 작업을 수행합니다

struct Force { 
    value v = {{1.0, 2.0}}; 
} 

v은 구조체의 벡터입니다. 두 번째 버전은 벡터 v을 단일 요소로 초기화하며이 요소 자체는 {1.0, 2.0} 값으로 초기화됩니다.

+0

나는 또한 그것을 깨달았다. 감사! – Pippi

관련 문제