2014-02-17 6 views
-5

У меня возникли проблемы с использованием обеих функций, перечисленных ниже в моей основной программе c из-за неявной декларации объявления для функции twos. Может ли кто-нибудь проконсультироваться. Спасибо!Неявное объявление функции даже после включения заголовка

#include <stdio.h> 
#include <stdlib.h> 
float twoxaverage(int n, float t__scores[]); 

float getaverage(int n, float t_scores[]) 
{ int sum=0; float average=0; int i; 
    for (i=0; i<n; i++) 
    { 
      sum=sum + t_scores[i]; 
    } 


    average=(float)sum/(float)n; 
    return(average); 
} 

float twoxaverage(int n, float t__scores[]) 
{ float mult; 
    mult=2*(getaverage(n, t__scores)); 
    return (mult); 
} 

int main() 
{ 
    int t_score[]={1,2,3,4}; 
    float twox; 
    twox=twoaverage4,t_score); 
    float twoxaverage(int n, float t__scores[]); 

    return 0; 
} 
+1

Какова ошибка? Какая функция объявляется неявно? – Kninnug

+6

Код даже не синтаксически недействителен. Отправьте фактический код с полной информацией об ошибке. – NPE

+0

Что вы пытаетесь сделать, включив 'float twoxaverage (int n, float t__scores []);' в основном? Думаю, вам это не нужно. – user376507

ответ

1

Ваш главный должен перейти от:

int main(){ 

    int t_score[] = { 1, 2, 3, 4 }; float twox; 
    twox = twoaverage4, t_score); float twoxaverage(int n, float t__scores[]); 

    return 0; 
} 

TO:

int main(){ 

    int t_score[] = { 1, 2, 3, 4 }; 
    float twox; 
    twox = twoxaverage(4, t_score); 

    return 0; 
} 

как начало.

Я мог бы также упростить вашу:

float getaverage(int n, float t_scores[]){  
    int sum=0; float average=0; int i; 
    for (i=0; i<n; i++){ 
     sum=sum + t_scores[i]; 
    } 

    average=(float)sum/(float)n; 
    return(average); 
} 

TO:

float getaverage(int n, float t_scores[]){  
    float average=0; int i; 

    for (i=0; i<n; i++){ 
     average = average + t_scores[i]; 
    } 

    return(average/(float)n); 
} 

Это использует один менее изменчивы и выполняет ту же математику.

+0

Пока хороший стилистически, я не вижу, как это изменит ситуацию. –

+0

@LightnessRacesinOrbit - вы не видите его основную процедуру, в частности строку «twox = twoaverage4, t_score», float twoxaverage (int n, float t__scores []); – trumpetlicks

+0

О да, я пропустил его вопиющую синтаксическую ошибку. :) –

0

В этой линии у вас есть по крайней мере две опечатки в одном идентификатору

twox=twoaverage4,t_score);float twoxaverage(int n, float t__scores[]); 

Вместо

twox=twoaverage4,t_score); 

там должно быть

twox = twoxaverage(4,t_score); 

Также декларация функции, которая следует не требуется. Таким образом, вместо

twox=twoaverage4,t_score);float twoxaverage(int n, float t__scores[]); 

вы можете просто написать

twox = twoxaverage(4,t_score); 

Я думаю, вы должны получить не только среднее, но и вывести его. Таким образом, вы могли бы по крайней мере, добавить ничего о

std::cout << twox << std::endl; 

Или, если это программа C, то вы можете использовать printf вместо C++ operator << к выходу twox

Также примите во внимание, что функция getaverage является неправильным. Вы преобразование чисел с плавающей точкой в ​​целом, когда добавить их к сумме

  float getaverage(int n, float t_scores[]) 
      { int sum=0; float average=0; int i; 
       for (i=0; i<n; i++) 
      { 
       sum=sum + t_scores[i]; 
      } 


      average=(float)sum/(float)n; 
      return(average); 
      } 

Действительная функция может выглядеть следующим образом

  float getaverage(int n, const float t_scores[]) 
      {  
       float sum = 0.0f; 

       for (int i = 0; i < n; i++) 
       { 
        sum += t_scores[i]; 
       } 

       return (n == 0 ? 0.0f : sum/n); 
      } 

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

  float getaverage(int n, const float t_scores[]) 
      {  
       float sum = 0.0f; 
       int i = 0; 

       for (; i < n; i++) 
       { 
        sum += t_scores[i]; 
       } 

       return (n == 0 ? 0.0f : sum/n); 
      } 

Функция twoxaverage может быть упрощена следующим образом

inline float twoxaverage(int n, const float t__scores[]) 
{ 
    return (2 * getaverage(n, t__scores)); 
} 
Смежные вопросы