0

我希望使用带有模板参数 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

}

春季班:

template <typename V>               
class Spring {

public:
 typedef V value;       

}

但是,该程序会产生missing template arguments before 'v'错误。为什么没有struct Force看到spring valuevalue在 Spring 类中?

4

2 回答 2

2

这甚至不应该编译:

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

你不能有两个同名的类型!

将模板重命名为Spring_,或者给它一个默认的模板参数。

于 2013-04-02T01:40:12.033 回答
1

我知道这个问题已经回答了,但是......

这不会为我编译(您的原始代码):

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

但这确实:

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

v是结构的向量。第二个版本v使用单个元素初始化向量,该元素本身使用 values 初始化{1.0, 2.0}

于 2013-04-02T03:00:43.450 回答