2012-04-14 3 views
0

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

header.h

#ifndef HEADER_H 
#define HEADER_H 
#include <math.h> 
double reducedP(double P, double Pc); 
double reducedT(double T, double Tc); 
double SRK(double Tr, double Pr, double acc); 
#endif 

main.cpp

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

int main() 
{ 
    double T = 0; 
    double Tc = 0; 
    double Tr = 0; 
    double P = 0; 
    double Pc = 0; 
    double Pr = 0; 
    double acc = 0; 
    double Z = 0; 
    cout << "Enter Temperature: "; 
    cin >> T; 
    cout << "\n"; 
    cout << "Enter Pressure: "; 
    cin >> P; 
    cout << "\n"; 
    cout << "Enter Critical Temperature: "; 
    cin >> Tc; 
    cout << "\n"; 
    cout << "Enter Critical Pressure: "; 
    cin >> Pc; 
    cout << "\n"; 
    Tr = reducedT(T,Tc); 
    Pr = reducedP(P,Pc); 
    cout << "Reduced T,P\t\t\t" << Tr << "\t\t" << Pr <<"\n"; 
    cout << "Enter accentric factor: "; 
    cin >> acc; 
    cout << "\n"; 
    Z = SRK(Tr, Pr, acc); 
    cout << "Z is " << Z << "\n"; 
    return 0; 
} 

SRK.cpp

double SRK(double Tr, double Pr, double acc) 
#include <math.h> 
{ 
    double alpha; 
    double phi = 1; 
    double epsilon = 0; 
    double omega = 0.08664; 
    double psi = 0.42748; 
    double Zc = 1/3; 
    double a = (1+(0.480 + 1.574*acc - .176*acc*acc)*(1-sqrt(Tr))); 
    alpha = pow(a,2); 
    cout << "Alpha is " << alpha << "\n"; 
    double beta = omega*(Pr/Tr); 
    cout << "beta is " << beta << "\n"; 
    double q = (psi*alpha)/(omega*Tr); 
    cout << "q is " << q << "\n"; 
    double Z = 0; 
    double test = 0; 
    double Z_init = 1; 
    while(fabs(Z_init-test)>.00001) 
    { 
     Z = 1 + beta - (q*beta)*((Z_init - beta)/((Z_init)*(Z_init+beta))); 
     cout << "\n" << Z_init << "\n"; 
     test = Z_init; 
     Z_init = Z; 
    } 
    return (Z); 
} 
+4

Почему вы помещаете '#include ' между функцией и телом? – Mysticial

+0

В качестве примечания стороны используйте '' вместо ''. Последнее считается устаревшим с момента его освобождения. – chris

ответ

5

Это:

double SRK(double Tr, double Pr, double acc) 
#include <math.h> 
{ 

является недействительным. Вы не можете поместить #include файла заголовка системы между сигнатурой функции и ее телом.

Изменить его:

#include <math.h> 
double SRK(double Tr, double Pr, double acc) 
{ 

В общем, ваши #include линии должны идти в верхней части файла .cpp, прежде чем любой из вашего кода.

+0

Спасибо, что получил. Извините за тупой вопрос, я немного новичок в этом. – tjtoml

2

В SRK.cpp вы должны переместить #include <math.h> в начало файла. Кроме того, в header.h вам строго не нужен math.h, поэтому вам не нужно включать его.

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