0

コードは、クラスのインスタンスを作成し、プライベート変数を出力するだけです。このサイトで「エラー C4430: 型指定子がありません」というエラーを (20 以上) 調べましたが、どれも役に立ちませんでした。

クラス ファイル ("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 
4

2 に答える 2

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;
}
于 2013-03-11T19:11:00.703 に答える
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() { }

ただし、この場合は、デフォルトのデストラクタを使用するだけで済みます。

于 2013-03-11T19:11:20.303 に答える