2016-03-11 116 views
-5

我正在做一个任务,要求创建一些函数分别读取数据,计算分数和输出数据。C++无效转换int *到int

我觉得我很接近有这个完整的,但继续运行到以下错误:

66 [错误]无效的转换,从int (*)(studentType*, int)int [-fpermissive]

30 [错误]初始化的void printResults(std::ofstream&, studentType*, int, int)参数3 -fpermissive]

我搜索通过计算器和其他论坛,但不能完全得到它的底部。有谁知道我的代码可能会导致这些错误?

我也有一个偷偷摸摸的怀疑,我传递价值的方式并不完全是现货。我知道这是一个开放式的问题,但任何反馈将不胜感激。

下面是代码:

#include <iostream> 
    #include <string> 
    #include <fstream> 
    #include <iomanip> 

    using namespace std; 

    //sets limit for students 
    const int max_students = 20; 

    //student info struct 
    struct studentType 
    { 
     string firstName; 
     string lastName; 
     int score; 
     char grade; 
    }; 

    //function declarations 
    void dataInput(ifstream& inFile, studentType slist[], int listSize); 
    void calcGrade(studentType sList[], int listSize); 
    void printResults(ofstream& outFile, studentType sList[], int highScore, int listSize); 
    int highScore(studentType sList[], int listSize); 

    int main() 
    { 

     ifstream inFile; 
     ofstream outFile; 
     int listSize = max_students; 
     studentType sList[max_students]; 

     //checks for input file 
     inFile.open("scores.txt"); 

      if (!inFile) 
      { 
       cout << "No input file detected.. please try again." << endl; 

       return 0; 
      } 

     //checks for output file  
     outFile.open("results.txt"); 

      if (!outFile) 
      { 
       cout << "Cannot locate output file.. please try again" << endl; 

       return 0; 
      } 

     //calls functions 
     dataInput(inFile, sList, listSize); 

     calcGrade(sList, listSize); 

     printResults(outFile, sList, highScore, listSize); 

     return 0; 

    } 

    //function to collect names and scores from each student 
    void dataInput(ifstream& inFile, studentType sList[], int listSize) 
    { 
     for(int i = 0; i < listSize; i++) 
     { 

      inFile >> sList[i].firstName >> sList[i].lastName >> sList[i].score; 

     } 

    } 

    //calculates grades based on input scores 
    void calcGrade(studentType sList[], int score, int listSize) 
    { 

     for(int i = 0; i < listSize; i++) 
     { 
      if (score >= 90) 
       sList[i].score = 'A'; 
      else if (score >= 80) 
       sList[i].score = 'B'; 
      else if (score >= 70) 
       sList[i].score = 'C'; 
      else if (score >= 60) 
       sList[i].score = 'D'; 
      else 
       sList[i].score = 'F'; 

     } 

    } 

    //calculates highest score(s) 
    int highScore(studentType sList[], int listSize) 
    { 

     int i = 0; 

     int highScore = sList[i].score; 

     for(i; i < listSize; i++) 
     { 
      if(sList[i].score > highScore) 
      { 
       highScore = sList[i].score; 
      } 

     } 


     return highScore; 
    } 

    //prints results into output file 
    void printResults(ofstream& outFile, studentType sList[], int highScore, int listSize) 
    { 

     int topScore = highScore; 
     int i = 0; 

     //header 
     outFile << setw(10) << "Name " << setw(10) << "Score " << setw(10) << "Grade " << endl; 

     for (int i = 0; i < listSize; i++) 
     { 
      //content 
      outFile << left << setw(25) << sList[i].lastName << ", " << sList[i].firstName << 
      right << " " << setw(5) << sList[i].score << setw(5) << " " << sList[i].grade << endl; 

      outFile << " " << endl; 

      outFile << "Highest test score: " << topScore << endl; 

      outFile << "Students with the highest score: " << endl; 

      for(int i = 0; i < listSize; i++) 
      { 
       if (sList[i].score == topScore) 
       { 
        outFile << sList[i].lastName << ", " << sList[i].firstName << endl; 
       } 

      } 

     } 

    } 
+1

你真的认为这有助于发布所有的代码?! – Bathsheba

+0

@Bathsheba我是这个网站的新手。我不记得在建议中没有这样做,但是谢谢你的发言。 – elpretentio

+0

我认为这将有助于建立背景,但我现在不知道。 – elpretentio

回答

0

的问题是在这里:

int main() 
    ... 
    printResults(outFile, sList, highScore, listSize); 
    return 0; 
} 

的第三个参数你把highScore,但它是你声明的功能!它应该是一个int的数字。

+0

谢谢,我正在纠正现在 – elpretentio

1

两个主要问题:

  1. 你定义void calcGrade(studentType sList[], int listSize);但随后实现它为void calcGrade(studentType sList[], int score, int listSize)

  2. 主你使用变量highScore这没有定义,只有定义了这样的名称的函数,这就是为什么你越来越奇怪的错误,指向有趣的指针ction不能转换成int

+0

谢谢,这是有帮助的 – elpretentio