首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么编译会导致缺少模板参数错误?

为什么编译会导致缺少模板参数错误?
EN

Stack Overflow用户
提问于 2013-04-02 09:27:17
回答 2查看 91关注 0票数 0

我希望使用带有模板参数V的Spring类:

代码语言:javascript
运行
复制
#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类:

代码语言:javascript
运行
复制
template <typename V>               
class Spring {

public:
 typedef V value;       

}

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-02 09:40:12

这甚至不应该被编译:

代码语言:javascript
运行
复制
typedef Spring<spring_value<double, double>> Spring;

不能有两个同名的类型!

将模板重命名为类似于Spring_的名称,或为其提供默认的模板参数。

票数 2
EN

Stack Overflow用户

发布于 2013-04-02 11:00:43

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

这不能为我(你的原始代码)编译:

代码语言:javascript
运行
复制
struct Force {
  value v = {1.0, 2.0}; //error
}

但这确实是:

代码语言:javascript
运行
复制
struct Force {
  value v = {{1.0, 2.0}};
}

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15754649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档