2014-02-05 2 views
0

Я задал вопрос об этой программе раньше, но все еще есть вопросы. Я создал пространство имен в файле stdfax.h и пытаюсь вызвать функции из main.Вызов методов из пространства имен - объявление идентификаторов

#include "stdafx.h" 
#include <iostream> 
#include <iomanip> 

using namespace std; 

int main() 
{ 
    deductions::getData(mStatus, nOfChildren, salary, contribPension); 
    deductions::taxAmount(mStatus, nOfChildren, salary, contribPension); 
} 

Пространство имен выглядит следующим образом:

#pragma once 

#include <iostream> 
#include <iomanip> 

using namespace std; 

namespace deductions 
{ 
    const double marriedDeduction = 7000.00; 
    const double singleDeduction = 4000.00; 
    const double personalExemption = 1500.00; 

    void getData(char& mStatus, int& nOfChildren, double& salary, 
       double& contribPension) 
    {cout << "\n\n Enter marital status: m or M (married), s or S (single): "; 
    cin >> mStatus; 

    if(mStatus == 'm' || mStatus == 'M') 
    { 
     cout << " Number of children:" << setfill(' ') << setw(40) << ' '; 
     cin >> nOfChildren; 
    } // end IF 

    cout << setfill(' '); 
    cout << " Enter gross Salary:" << setw(40) << ' '; 
    cin >> salary; 
    cout << " Percentage of salary contributed to Pension (0 to 6):" << setw(6) << ' '; 
    cin >> contribPension; 
    cout << endl;} // end getData( 

    double taxAmount(char mStatus, int nOfChildren, double salary, 
      double contribPension)  
    {...} 
}; 

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

Объявление переменных в основном дает ошибку, которую они уже определили в stdfax.

+1

Где объявляются 'mStatus, nOfChildren, зарплата, contribPension'? –

+0

Когда я объявляю те, которые находятся в пространстве имен, он дает ошибку, говоря, что они уже определены в stdfax. Это дает ту же ошибку, когда я пытаюсь объявить их в основном тоже. – user3273096

+0

Я бы удалил пространство имен из stdfax.h. Этот файл зарезервирован для предварительно скомпилированных заголовков в VS. Поместите его в свой собственный заголовок («deductions.h») и включите его в основное. Очистите и перестройте свой проект. –

ответ

2

Пожалуйста, объявить идентификаторы, используемые в методе ...

deductions::getData(mStatus, nOfChildren, salary, contribPension); 
3

Вы не объявили переменные, которые вы передаете в качестве параметров:

int main() 
{ 
    deductions::getData(mStatus, nOfChildren, salary, contribPension); 
    deductions::taxAmount(mStatus, nOfChildren, salary, contribPension); 
} 

Вы должны объявить их. Например:

int main() 
{ 
    char mStatus; 
    int nOfChildren; 
    double salary, contribPension; 
    deductions::getData(mStatus, nOfChildren, salary, contribPension); 
    deductions::taxAmount(mStatus, nOfChildren, salary, contribPension); 
} 
+1

Вы не можете передавать литерал по ссылке, если это не const. –

+0

О, да. Забыл об этом. Учитывая, что имя функции - 'getData', ссылки, вероятно, должны быть const, хотя и не являются ссылками вообще. Трудно сказать без определений. – user2079303

+0

Поскольку get data возвращает 'void', я бы предположил, что он каким-то образом получает данные от пользователя и назначает его входным параметрам. –

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