0

我的新程序有一点小问题。我制作了一个班级档案,直到一切顺利!我明白了!

C:\Code Block Projects\Not so Advanced Calculator\Calcu.cpp|5|error: expected lified-id before '{' token|

在代码块 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.cpp错误消息所在的源文件中。您缺少 a classor structbefore Calcu

另一个问题是您尝试重新定义源文件中的类。您应该将完整的定义放在头文件中,并将方法的实现放在源文件中。

正如 WhozCraig 在评论中提到的,解决第二个问题也解决了第一个问题。

于 2013-03-13T12:34:05.190 回答
1

这是基于您的问题的一些建议:

  • 您不应在and中定义Calcu两次 。你应该安排你的代码,头文件只有类的成员和接口声明,并将所有实现放在文件中。Calcu.cppCalcu.hCalcu.cpp

    • 对于#include <header.h> 代码中的语句,C++ 预处理器只会在此时展开头文件。所以扩展后,你的Calcu.cpp 会有两个定义,class Calcu哪个会有问题。
  • getExponent()中,C++ 不支持**运算符。您应该使用数学库。(并且不能重载**运算符,因为 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 回答