0

新しいプログラムに少し問題があります。クラスファイルを作成しましたが、それまではすべてうまくいきました。わかった!

C:\ Code Block Projects \ Not so Advanced Calculator \ Calcu.cpp | 5 |エラー:'{'トークンの前にlified-idが必要です|

コードブロック12.11;

私のCalcu.hファイル:

 #ifndef CALCU_H
 #define CALCU_H


class Calcu
{
    public:
        Calcu();
};

#endif // CALCU_H

私のCalcu.cppクラスファイル:

    #include "Calcu.h"
#include <iostream>

using namespace std;
Calcu{
    Calcu(){}
    public:
    void setNumbers(int x, int y){ no1=x, no2=y; }
    int getAddition() {return no1+no2;}
    int getSubstraction() {return no1-no2;}
    int getDivision() {return no1/no2;}
    int getMultiplication() {return no1*no2;}
    int getExponent(){ return no1**no2; }
private:
    int no1, no2;
};

そして私のmain.cpp:

    #include <iostream>
#include <Calcul.h>
using namespace std;

void function_calculator()
{
        Calcu calcul;
    int noI, noII; char operation;
    cout << "Welcome to a more advanced and optimized calculator. ©UnityInc." << endl;
    cout << "Please insert your desired numbers. First number should be carefully selected if you wish to raise to the exponent.";
    cin>>noI;
    cout<<"Great, now insert your other number: ";
    cin>>noII;
    calcu.setNumbers(noI, noII);
    cout<<"Very well, what kind of operation would you like? +, -, *, / or exponantiation(type **): ";
    cin>>operation;
    if(operation=='+')
        calcul.getAddition();
    else if(operation=='-')
        calcul.getSubstraction();
    else if(operation=='/')
        calcul.getDivision();
    else if(operation=='*')
        calcul.getMultiplication();
    else if(operation=='**')
        calcul.getExponent();
    else
        return function_calculator;

}

int main()
{
    function_calculator;
    return 0;
}

どんな助けでも大歓迎です!

4

3 に答える 3

3

Calcu.cpp2つの問題があります。1つはエラーメッセージが表示されているソースファイルにあります。classまたはのstruct前がありませんCalcu

もう1つの問題は、ソースファイルでクラスを再定義しようとすることです。完全な定義をヘッダーファイルに入れ、メソッドの実装をソースファイルに入れる必要があります。

そして、WhozCraigがコメントで述べたように、2番目の問題を解決すると最初の問題も解決されます。

于 2013-03-13T12:34:05.190 に答える
1

あなたの質問に基づいた推奨事項は次のとおりです。

  • andCalcuで 2 回 定義しないでください。ヘッダー ファイルにクラスのメンバーとインターフェイス宣言のみが含まれるようにコードを調整し、すべての実装をファイルに配置する必要があります。Calcu.cppCalcu.hCalcu.cpp

    • コード内の#include <header.h> ステートメントの場合、C++ プリプロセッサはその時点でヘッダー ファイルのみを展開します。したがって、展開後、Calcu.cpp にclass Calcuは問題のある 2 つの定義が含まれます。
  • では、C++ は演算子getExponent()をサポートしていません。**数学ライブラリを使用する必要があります。( **C++ は存在する演算子のオーバーロードのみをサポートするため、演算子をオーバーロードすることはできません)

于 2013-03-13T12:36:58.637 に答える
0

私の Calcu.h ファイル:

 #ifndef CALCU_H
 #define CALCU_H


class Calcu
{
    public:
        Calcu(){}

    void setNumbers(int x, int y){ no1=x, no2=y; }
    int getAddition() {return no1+no2;}
    int getSubstraction() {return no1-no2;}
    int getDivision() {return no1/no2;}
    int getMultiplication() {return no1*no2;}
    int getExponent(){ return //your exponent; }
private:
    int no1, no2;
};

#endif // CALCU_H

私のCalcu.cppクラスファイル:

#include "Calcu.h"
#include <iostream>
using namespace std;

そして私のmain.cpp:

#include <iostream>
#include <Calcul.h>
using namespace std;

void function_calculator()
{
//...
}

int main()
{
    function_calculator();
    return 0;
}
于 2013-03-13T12:45:35.133 に答える