ld返回1错误退出状态C ++

时间:2014-11-06 04:51:15

标签: c++ exit ld

我一直在"未定义引用' x'"其中x是函数原型。我已经绘制了功能,但主要仍然需要工作只是fyi。我只想在按下之前修复ld返回错误1,但我似乎无法确定问题。

 #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 个答案:

答案 0 :(得分: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. 按原样保留声明,它们看起来很好(语法方面)。