C ++编译错误C4430

时间:2016-04-15 17:06:35

标签: c++ c++14

代码显示了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(...) - 循环的情况下实现它。 更改标题或其他任何内容都没有帮助,我必须承认此错误对我来说甚至没有意义,因为第二个模板函数运行良好。

我希望有人可以帮助我

1 个答案:

答案 0 :(得分:2)

template<class T = std::string>
bool hasPrefix(const T& string, const, T& prefix);
//                                   ^

更加关注你正在做的事情。

通过简单地查看有效的声明和没有声明的声明,显而易见。