2013-04-02 114 views
0

我希望用一個Spring類模板參數五:爲什麼編譯會導致缺少模板參數錯誤?

#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類中看不到spring valuevalue

+2

你能製作一個小的,*完整的*程序產生這個錯誤嗎? –

+0

第二個錯誤是因爲您無法將結構賦值給double。 – maditya

+0

其實這是錯誤的 - 第二個錯誤是因爲v已經是一個spring_value,並且您試圖獲得一個也稱爲spring值的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

相關問題