2014-12-05 2 views
-5

Так что я действительно новичок в C++, поэтому простите меня за любительский код. Я пытаюсь сделать код, который действует как мини-SIRI, который включает в себя классы наследования и файлы заголовков, но в настоящее время я получаю странную ошибку в моем заголовочном файле.C++ Ошибка «ожидаемый неквалифицированный идентификатор до») «токен» (строка 1)

Вот мой код в каждом файле

main.cpp

#include <iostream> 
#include <string> 
#include "JARVIS.h" 

using namespace std; 

int main() 
{ 
string command; 
bool jarvis_running = false; 
cout << "J.A.R.V.I.S" << endl; 
cout << "Give a command from the list of commands available." << endl; 
cin >> command; 

if (command == "-h") 
    { 
    jarvis_running = true; 
    cout << "The available commands are: math" << endl; 
    } 

if (command = "math") 
    { 
    jarvis_running = true; 
    math ma; 
    } 


if (jarvis_running == false) 
    { 
    cout << "That command was not valid" << endl; 
    cout << "Type '-h' if you need to know the available commands." << endl; 
    } 

return 0; 
} 

* JarvisFunctions.cpp

#include <iostream> 
#include <string> 
#include "JARVIS.h" 

using namespace std; 

int math() 
{ 
    cout << "(A)ddition, (S)ubtraction, (M)ultiplication, or (D)ivision?" << endl; 
    cin >> mathCommand; 

    if (mathCommand == "A") 
     { 
     cout << "input the two integers you are adding" << endl; 
     cin >> integer1 >> integer2; 

     ma.setValues(integer1, integer2); 
     addition add; 
     } 


    else if(mathCommand == "S") 
     { 
     cout << "input the two integers you are subtracting" << endl; 
     cin >> integer1 >> integer2; 

     ma.setValues(integer1, integer2); 
     subtraction sub; 
     } 

    else if(mathCommand == "M") 
     { 
     cout << "input the two integers you are multiplying" << endl; 
     cin >> integer1 >> integer2; 

     ma.setValue(integer1, integer2); 
     mulitplication multi; 
     } 

    else if(mathCommand == "D") 
     { 
     cout << "input the two integers you are dividing" << endl; 
     cin >> integer1 >> integer2; 

     ma.setValues(integer1, integer2); 
     divions div; 
     } 

    else 
     { 
     cout << "you did not input the right fuctions, either use A, S, M, or D" << endl; 
     } 
} 

JARVIS.h

#ifndef JARVIS_H 
#define JARVIS_H 

class math 
    { 
    private: 
    int val1; 
    int val2; 

    public: 

    math() 
    { 
    cout<<"calling math constructor"<<endl; 
    } 

    void setValues (int a, int b){ 
     int a = val1; 
     int b = val2; 
    } 

    ~math() 
    { 
    cout<<"calling math deconstructor"<<endl; 
    } 

} 

class addition:public math 
{ 
    int finalVal = val1 + val2; 
    return finalVal; 
}; 

class subtraction:public math 
{ 
    int finalVal = val1 - val2; 
    return finalVal; 
}; 

class multiplication:public math 
{ 
    int finalVal = val1 * val2; 
    return finalVal; 
}; 

class division:public math 
{ 
    int finalVal = val1/val2; 
    return finalVal; 
}; 

#endif //JARVIS_H 

Я довольно конечно, все еще много чего с классом и как я их называю, но пока я не уверен, что вызывает эту ошибку.

+3

Класс 'math' не имеет своей закрывающейся запятой после закрытия'} '. И ни одна из производных от «математики» не верна. Вы обращаетесь с ними так, как будто это функции; не классы. – WhozCraig

+0

Было бы полезно с полным журналом компилятора и командой, которую вы используете для компиляции вашей программы, она выглядит как синтаксическая ошибка где-то. – gauteh

+0

Неверный класс 'дополнение'. –

ответ

1

Вы забыли поместить точку с запятой после закрывающей скобки определения математического класса.

Определения Кроме того, как это

class addition:public math 
{ 
    int finalVal = val1 + val2; 
    return finalVal; 
}; 

недействительны в C++. Класс не является функцией, и его определение не может содержать оператор return. не

И нет никакого смысла, чтобы определить локальный объект в блоке объема, который не используется, как в этом случае утверждение

if (command == "math") 
    { 
    jarvis_running = true; 
    math ma; 
    } 

ма объект не будет существовать вне составного оператора из если.

Или где mathCommand определено, что используется в заявлении

cin >> mathCommand; 

Или вместо

void setValues (int a, int b){ 
    int a = val1; 
    int b = val2; 
} 

Я думаю, что вы имеете в виду

void setValues (int a, int b){ 
    val1 = a; 
    val2 = b; 
} 

Так что ваша программа совершенно неправильно. В нем много ошибок, поэтому нет смысла обсуждать ваш код. Сначала вы должны написать более или менее действительный код C++.

+1

И нет класса под названием 'divions', но он используется в' main() '.' Math :: setValues' не будет компилироваться , так как он обновляет 'a' и' b' в той же области, что и параметры. И, как показала легкость, даже если она скомпилирована, все еще не так, поскольку назначения находятся в неправильном направлении, используя неинициализированный контент из 'val1' и' val2'. – WhozCraig

+0

ok, я исправил точки с запятой. Кажется, я все еще получаю ту же ошибку при компиляции кода. Да, я должен был понять, что класс не будет работать таким образом. все еще добавьте функцию внутри класса, которая будет делать простое добавление вправо? Могу ли я не запускать функцию через оператор if? Я определил mathCommand сейчас. Спасибо за помощь, я знаю, что ее затоплены ошибки, и я хочу отлаживать он, но эта текущая ошибка, кажется, сдерживает другие ошибки от показа. В ней сказано, что есть только 1 erro Когда я знаю, что есть нечто большее. – GunR

+0

Я также перевернул a и b и зафиксировал класс divions, он был ошибочно написан. – GunR

Смежные вопросы