2014-11-06 86 views
1

我不斷收到「未定義的引用'x'」,其中x是函數原型。我有功能映射出來,但主要仍然需要工作只是fyi。我只是想解決在按下之前ld返回錯誤1,但我似乎無法指出問題。ld返回1錯誤退出狀態C++

#include <iostream> 

#include <iomanip> 

#include <cmath> 

using namespace std; 

//Symbolic Constants 

const int MAX=11; 

//Function Prototypes 

int buildQuizArray(int); 
void printArray(string,int,int); 
double calcQuizAverage(int,int); 
void sortArray(int,int); 

int main() 

{ 

    int quizScores[MAX]; 
    int compQuiz; 
    int tempArray[MAX]; 
    int average; 

    compQuiz = buildQuizArray(quizScores[MAX]); 

    quizScores[MAX]=tempArray[MAX]; 

    average = calcQuizAverage(quizScores[MAX], compQuiz); 

    cout<<endl<<"Your quiz average is "<<average<<endl; 

    printArray ("Quiz Scores", tempArray[MAX], compQuiz); 

    sortArray(tempArray[MAX], compQuiz); 

} 



int buildQuizArray(int quizArray[]) 

{ 

    int numQuiz, input, a; 
    a=0; 
    numQuiz=1; 

    cout << "Enter your score for quiz "<<numQuiz<<" (-1 to quit): "; 
    cin >> input; 

    while (input != -1) 
    { 
     quizArray[a] = input; 
     a++; 
     numQuiz++; 

     cout<< "Enter your score for quiz "<<numQuiz<<" (-1 to quit): "; 
     cin >> input; 

    } 
    return a+1; 
} 



void printArray(string reportTitle, int quizArray[], int numberOfQuizzes) 

{ 

    int a; 

    cout<< reportTitle <<endl<<"-----------"<<endl; 

    for (a=0; a<numberOfQuizzes; a++) 
    { 
     cout<< "Quiz " << a <<": " << setw(2) <<quizArray[a] <<"/10"<<endl; 
    } 
} 



double calcQuizAverage(int quizArray[], int numberOfQuizzes) 

{ 

    int sum, lowSum, avg, a; 
    a = 0; 
    sum = 0; 

    lowSum = quizArray[0] + quizArray[1]; 

    for (a=0; a< numberOfQuizzes; a++) 
    { 
     sum += quizArray[a]; 
    } 

    if (numberOfQuizzes <= 2) 
    { 
     avg = sum/(10 * numberOfQuizzes) * 100; 
    } 

    else 
    { 
     (sum - lowSum)/(10 * (numberOfQuizzes - 2)) * 100; 
    } 

    return avg; 
} 



void sortArray(int quizArray[], int numberOfQuizzes) 

{ 

    int min, a, b, temp; 

    for (a=0; a<numberOfQuizzes; a++) 
    { 
     min = a; 
    } 

    for(b=a+1; b<numberOfQuizzes; a++) 
    { 

     if (quizArray[a] < quizArray[min]) 
     { 
      min = b; 
     } 
    } 

    temp = quizArray[a]; 
    quizArray[a]=quizArray[min]; 
    quizArray[min]=temp; 
} 

回答

1

您聲明:

int buildQuizArray(int); 

但是你定義:

int buildQuizArray(int quizArray[]) ... 

int[]是不一樣的int

另外:當您調用它們時,您正將int傳遞給函數;請注意,例如quizScores[MAX]quizScores的MAXth元素,並且是int,它實際上超出了該數組的末尾,而且實際上並不是您想要做的。

如果我猜你是怎麼在這裏我猜你方纔的一切權利,但你在不知不覺中聲明你的原型不正確(的int代替int[]),所以你再上漲了[MAX]到陣列你傳遞給函數只是爲了讓它編譯,然後遇到了不可避免的鏈接器問題,導致你在這裏。如果這就是你所做的,那不是正確的方法。

你真正的意思做的是:

  1. 爲了您的函數需要數組,正確申報他們:

    int buildQuizArray (int[]); 
    
  2. 傳遞調用它時數組指針本身的功能:

    buildQuizArray(quizScores); 
    
  3. 留下您的聲明,它們看起來很好(s yntax明智)。

+0

哇。非常感謝!剛開始,仍然在學習。再次感謝。 – Ekko 2014-11-06 05:52:52

相關問題