代码显示了2个基于模板的功能,实际上看起来很好。它们都具有相同的语法,但只有一个是有效的。我一直尝试不同类型的实现,但没有一个与第一个一起工作。在你问之前:我找不到有帮助我的解决方案......
但是这里看看代码:
#pragma once
#include <exception>
#include <iostream>
#ifdef WIN32
#include <Windows.h>
#endif //WIN32
#include <string>
namespace util {
/* ############### */
/* # # */
/* # For strings # */
/* # # */
/* ############### */
template<class T = std::string>
bool hasPrefix(const T& string, const, T& prefix);
template<class T = std::string>
bool hasPostfix(const T& string, const T& postfix);
}
template<class T>
bool util::hasPrefix(const T& string, const T& prefix) {
//CODE
}
template<class T>
bool util::hasPostfix(const T& string, const T& prefix) {
//CODE
}
现在Visual Studio在尝试编译时给出了这个错误:
错误C4430:缺少类型说明符 - 假定为int!
但仅适用于hasPrefix(...)而不适用于hasPostfix(...)! 我尝试在没有static_assert(...)或for(...) - 循环的情况下实现它。 更改标题或其他任何内容都没有帮助,我必须承认此错误对我来说甚至没有意义,因为第二个模板函数运行良好。
我希望有人可以帮助我
答案 0 :(得分:2)
template<class T = std::string>
bool hasPrefix(const T& string, const, T& prefix);
// ^
更加关注你正在做的事情。
通过简单地查看有效的声明和没有声明的声明,显而易见。