几条"Error C4430: missing type specifier"错误消息

Several "Error C4430: missing type specifier" error messages

本文关键字:specifier 错误 消息 type Error C4430 几条 missing      更新时间:2023-10-16

所有代码应该做的是创建类的实例并打印私有变量。我已经看了一堆(超过20)的"错误C4430:缺少类型说明符"错误在这个网站上,但没有帮助。

下面是类文件("Number.h"):

#ifndef NUMBER_H
#define NUMBER_H
#include <string>
template <typename T>
class Number {
private:
    T myVar;
public:
    Number(T consVariable);
    ~Number();
    void setNumber(T newVar);
    T getNumber();
    bool isEqual(T check);
    bool isBigger(T check);
    bool isSmaller(T check);
};
template <typename T>
Number<T>::Number(T conVar) {
    myVar = conVar;
}
template <typename T>
Number<T>::setNumber(T setVar) {
    myVar = setVar;
}
template <typename T>
Number<T>::getNumber() {
    return myVar;
}
template <typename T>
Number<T>::isEqual(T n) {
    if (myVar == n)
        return true;
    else
        return false;
}
template <typename T>
Number<T>::isBigger(T n)
{
    if (myVar >= n)
        return true;
    else
        return false;
}
template <typename T>
Number<T>::isSmaller(T n)
    {
    if (myVar <= n)
        return true;
    else
        return false;
}
#endif

和错误:

number.h(31): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
number.h(36): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
number.h(44): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
number.h(53): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
number.h(62): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 

除了构造函数和析构函数之外,所有的函数定义都需要返回类型。例如,考虑setNumber:

template <typename T>
Number<T>::setNumber(T setVar) {
  myVar = setVar;
}

这应该返回void:

template <typename T>
void Number<T>::setNumber(T setVar) {
  myVar = setVar;
}

然后isEqual应该返回bool,以此类推。


别忘了定义你的析构函数:

template <typename T>
Number<T>::~Number() { }

然而,在这种情况下,您只需使用默认析构函数就可以了。

成员函数定义没有返回类型。您应该指定与在相应的声明中指定的相同的返回类型

例如,既然您这样声明setNumber():

    void setNumber(T newVar);
//  ^^^^

它的定义应该是这样的(注意我添加了void返回类型):

    template <typename T>
    void Number<T>::setNumber(T setVar) {
//  ^^^^  
//  Don't forget the return type!
        myVar = setVar;
    }

这是你的类定义和成员函数定义之后的样子:

#include <string>
template <typename T>
class Number {
private:
    T myVar;
public:
    Number(T consVariable);
    ~Number();
    void setNumber(T newVar);
    T getNumber();
    bool isEqual(T check);
    bool isBigger(T check);
    bool isSmaller(T check);
};
template <typename T>
Number<T>::Number(T conVar) {
    myVar = conVar;
}
template <typename T>
void Number<T>::setNumber(T setVar) {
    myVar = setVar;
}
template <typename T>
T Number<T>::getNumber() {
    return myVar;
}
template <typename T>
bool Number<T>::isEqual(T n) {
    if (myVar == n)
        return true;
    else
        return false;
}
template <typename T>
bool Number<T>::isBigger(T n)
{
    if (myVar >= n)
        return true;
    else
        return false;
}
template <typename T>
bool Number<T>::isSmaller(T n)
    {
    if (myVar <= n)
        return true;
    else
        return false;
}
相关文章: