2013-12-02 3 views
-2

Может ли кто-нибудь сказать мне, что означают мои ошибки времени компиляции и помочь мне с ними?Странные ошибки компиляции

Heres одна из ошибок:

C: \ doc1 \ collect2.exe [Error] л.д. возвращается 1 выход статус

Вот текст файла:

T(F)  R1  R2  R3  R4 
95.0  95.20  66.10  43.10  29.00 
96.0  96.10  67.60  43.50  31.20 
97.0  97.40  67.00  43.70  30.50 
98.0  97.20  69.10  44.10  30.70 
99.0  98.90  68.00  44.70  32.80 
100.0 99.50  71.10  45.10  31.50 
101.0 101.00  71.20  45.30  31.60 
102.0 101.60  71.00  45.70  30.50 
103.0 101.80  73.10  46.30  32.50 
104.0 103.70  73.50  46.60  32.70 
105.0 105.60  72.80  47.10  33.60 

Вот мой источник

#include <fstream> 
#include <iostream> 
#include <string> 
#include <iomanip> 
#include <cmath> 
#include <stdlib.h> 

using namespace std; 

void read(); 
void slope(double,double,double,double,double,int,double); 
void write(double,double,double,double,double,double); 
double temp, R1, R2, R3, R4,rsq; 

int main() 
{ 
    read(); 
    return 0; 
} 

void read() 
{ 

    ifstream indata("c:\\doc1\\temperaturedata.txt"); 
    int indx=0; 
    if(indata == NULL) 
    { 
     cout<< "There is no file go get it from the CD"<< endl; 
     return; 
    } 
    const int columns = 5; 
    const int rows = 11; 

    double Ihatearray[rows][columns]; 
    string temparature; 
    getline(indata, temparature); 
    for(int i = 0; i < rows; ++i) 
    { 
     for (int j = 0; j < columns; ++j) 
      { 
       cout << "\t" << flush; 
       indata >> Ihatearray[i][j]; 
       cout.setf(ios::fixed); 
       cout << setprecision(2) << Ihatearray[i][j] <<flush; 
      } 
      cout << endl; 
      double temp[20], R1[20],R2[20],R3[20],R4[20]; 
    } 
    //indata.close(); 
    slope(temp, R1, R2, R3, R4,indx,rsq); 
} 
void slope(double x[5], double y[], double& m, double& b, int n,double& r) 
{ 
    int i; 
double xsum = 0., ysum = 0., xave, yave, x2sum = 0., y2sum = 0.,xysum =0.; 

for(int i = 0; i < n; i++) 
{ 
    xsum += x[i]; 
    ysum += y[i]; 
    x2sum += x[i] * x[i]; 
    y2sum += y[i] * y[i]; 
    xysum += x[i] * y[i]; 
} 

xave=xsum/n; 
yave=ysum/n; 

m=(xysum-yave*xsum)/(x2sum-xave*xsum); 
b=yave-m*xave; 
r=(xysum-n*xave*yave)/(sqrt(x2sum-n*xave*xave)*sqrt(y2sum-n*yave*yave)); 

write (temp, R1, R2, R3, R4,rsq); 

} 
void write (double temp [], double R1[], double R2[], double R3[],double R4[],double 
      rsq) 
{ 
    //Where I will print out a table of the results. 
} 
+0

Предполагая, что ОС - это Windows с именем «EXE». Следует помнить две вещи: 1) вы не возвращаете значения, кроме 0 из main(), 2), если вы используете ERRORLEVEL, я считаю, что это ненадежный/запутывающий механизм для получения статуса выхода, который в противном случае требует окружающая среда. В Windows я буду использовать && и || CLI ops как удобный способ определить успех EXE/неудачу; например, c: \> myprog.exe && echo работал! – bvj

+0

Я просто добавил это: void slope (double [], double [], double &, double &, double &, int, double &); теперь он говорит, что [Ошибка] не может преобразовать 'double' в 'double *' для аргумента '1' to 'void slope (double *, double *, double &, double &, double &, int, double &)', можете ли вы объяснить это? – user3059173

+0

Реализация slope() не соответствует объявлению slope(). Ваше первое использование slope() опирается на объявленный синтаксис. – bvj

ответ

0
void slope(double,double,double,double,double,int,double); 
void write(double,double,double,double,double,double); 

и

void slope(double x[5], double y[], double& m, double& b, int n,double& r) 

void write (double temp [], double R1[], double R2[], double R3[],double R4[],double rsq) 

Пятно разница? Эти декларации и определения должны совпадать.

Больше ошибок, ваш код выглядит следующим образом

double temp, R1, R2, R3, R4,rsq; 

void read() 
{ 
    ... 
    for(int i = 0; i < rows; ++i) 
    { 
     ... 
     double temp[20], R1[20],R2[20],R3[20],R4[20]; 
    } 
    //indata.close(); 
    slope(temp, R1, R2, R3, R4,indx,rsq); 
} 

Теперь посмотрим на то, что вы написали, вы объявили temp, R1, R2 и т.д. дважды. Теперь какое заявление вы считаете применимым, когда вы вызываете slope? Вот правило, декларации внутри { и } видны только внутри { и }.

У меня возникает ощущение, что вы должны быть немного более организованными в своем кодировании. Это только детали, но детали должны быть исправлены.

+0

Спасибо за помощь. Я смог определить мои объявления и определения, прежде чем ответить, но я не заметил, что дважды объявлял temp, R1 ect. спасибо – user3059173

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