2013-03-11 110 views
0

所有代码应该做的就是创建一个类的实例并打印私有变量。我已经浏览了一大堆(超过20)的“错误C4430:缺少类型说明符”错误在这个网站上,但没有任何帮助。几个“错误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 

回答

0

除构造函数和析构函数以外的所有函数定义都需要返回类型。例如,考虑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() { } 

在这种情况下,然而,你将只使用默认的析构函数脱身。

+0

* facepalm *显然,谢谢(和Andy Prowl)!现在,我有一个新的错误: main.obj:error LNK2019:无法解析的外部符号“public:__thiscall Number ::〜Number (void)”(?? 1?$ Number @ H @@ QAE @ XZ )在函数_main中引用 – Sondar 2013-03-11 19:19:11

+0

@Sondar你还没有定义你的析构函数。看我的编辑。 – 2013-03-11 19:20:15

+0

再次感谢sftrabbit! – Sondar 2013-03-11 19:25:56

0

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

例如,由于声明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; 
} 
相关问题