我希望使用带有模板参数V的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 value
或value
?
发布于 2013-04-02 09:40:12
这甚至不应该被编译:
typedef Spring<spring_value<double, double>> Spring;
不能有两个同名的类型!
将模板重命名为类似于Spring_
的名称,或为其提供默认的模板参数。
发布于 2013-04-02 11:00:43
我知道问题已经回答了,但是...
这不能为我(你的原始代码)编译:
struct Force {
value v = {1.0, 2.0}; //error
}
但这确实是:
struct Force {
value v = {{1.0, 2.0}};
}
v
是一个结构向量。第二个版本使用单个元素初始化向量v
,该元素本身是用值{1.0, 2.0}
初始化的。
https://stackoverflow.com/questions/15754649
复制相似问题