- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试编写一个模板类来帮助程序员编写正确的代码。给定从旧金山到华盛顿的路线和从华盛顿到纽约的路线,它将计算从旧金山经华盛顿到纽约的路线。当给定从旧金山到洛杉矶和华盛顿到纽约的路线时,编译器将报错。
这是类(没有正常的主力函数):
extern const char miami[] = "Miami";
template< const char* FINISH, const char* START>
class Route {
public:
Route();
~Route() {};
template<const char* OTHERPLACE>
Route<START, OTHERPLACE> alterFinish() const;
};
template<const char* START> // specialisation
template<const char* OTHERPLACE>
// Allow only miami as FINISH to be changed to something else.
Route<START, OTHERPLACE> Route<START, miami>::alterFinish() const{
return Route<START, OTHERPLACE>();
}
不幸的是,这不起作用。我收到“不完整类型的无效使用”错误。没有专门化的同类功能确实可以编译。我做错了什么?
最佳答案
invalid use of incomplete type
表示您使用了尚未声明的内容。在本例中,它是 Route
的偏特化:
template <const char* START>
class Route<START,miami>{
template<const char* OTHERPLACE>
Route<START, OTHERPLACE> alterFinish() const;
};
为什么需要这个?嗯,你想创建一个方法 alterFinish()
,它应该专门用于 template<class START> Route<START, miami>
.全名是Route<START, miami>::alterFinish()
.但是您从未定义过 template<class START> Route<START, miami>
任何地方。它是一个不完整的类型,因此编译器无法编译。
但是,我认为您的程序中还有其他一些错误。您真的有必要使用模板吗?不会像 std::map<std::pair<city,city>, double>
这样的东西足够你的成本?你真的想将你的城市保存为字符串文字吗?
此外,您的程序在您的特殊情况下崩溃的原因也不清楚。根本没有足够的代码,即使您提供的代码也不会提供编译器错误,除非添加必要的调整并移动许多符号。
关于c++ - 类模板,具有模板功能,特化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11370227/
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 4 年前。
正如您在 this travis.yml 中看到的那样文件,我的代码依赖于一些第三方库,我在构建项目之前将它们安装在远程系统上。 Travis 每次推送提交时都会下载并构建这些库,这可以避免吗?我的意
我是一名优秀的程序员,十分优秀!