2016-02-24 27 views
-1

我正在處理這個項目,這是我第一次使用makefile。使用makefile編譯C++錯誤,無法轉換main()::

,我得到的錯誤是:

 
HW1.cpp:45:55: error: could not convert ‘Student1’ from ‘main()::Student’ to ‘Student’ 

主文件:

#include "header.h" 
#include "function.h" 

main() 
{ 

    int input = 0; 
    bool loop = 1; 

    #include "list.cpp" 

    ResetArray(arrayCou, arrayStu); 

    while (loop) 
    { 
     cout << "cmd> "; 
     cin >> input; 
     switch (input) 
     { 
      case 1: 
       AddCourse(&Course1, arrayCou); 
       break; 
      case 2: 
       AddStudent(&Student1, arrayStu); 
       break; 
      case 3: 
       AddStuCourse(&Student1, &Course1, arrayStu, arrayCou); 
       break; 
      case 4: 
       AddGrade(&Student1, &Course1, arrayStu, arrayCou); 
       break; 
      case 5: 
       PrintCourse(&Student1, &Course1, arrayStu, arrayCou); 
       break; 
      case 6: 
       PrintStudent(&Student1, &Course1, arrayStu, arrayCou); 
       break; 
      case 7: 
       PrintStuCourse(&Student1, &Course1, arrayStu, arrayCou); 
       break; 
      case 8: 
       AvgStuCourse(&Student1, &Course1, arrayStu, arrayCou); 
       break; 
      case 9: 
       loop = 0; 
       break; 
      default: 
       break; 
     } 
    } 
} 

函數聲明:

#include "header.h" 

void ResetArray(Course arrayCou[][101][5], Student arrayStu[][3]); 
void AddCourse(Course Course1, Course arrayCou[][101][5]); 
void AddStudent(Student Student1, Student arrayStu[][3]); 
void AddStuCourse(Student Student1, Course Course1, Student arrayStu[][3], Course arrayCou[][101][5]); 
void AddGrade(Student Student1, Course Course1, Student arrayStu[][3], Course arrayCou[][101][5]); 
void PrintCourse(Student Student1, Course Course1, Student arrayStu[][3], Course arrayCou[][101][5]); 
void PrintStudent(Student Student1, Course Course1, Student arrayStu[][3], Course arrayCou[][101][5]); 
void PrintStuCourse(Student Student1, Course Course1, Student arrayStu[][3], Course arrayCou[][101][5]); 
void AvgStuCourse(Student Student1, Course Course1, Student arrayStu[][3], Course arrayCou[][101][5]); 

頭文件:

#include <iostream> 
#include <string.h> 
#include <cstring> 
#include <iomanip> 
using namespace std; 

const int MAXSIZE = 101; 

struct Student 
{ 
    string ID; 
    string name; 
    string majors; 
}; 

struct Course 
{ 
    string ID; 
    string title; 
    string department; 
    double grade; 
}; 

Student arrayStu[101][3]; 
Course arrayCou[101][101][5]; 

Course Course1; 
Student Student1; 

函數定義非常長,所以我不想包含所有的函數,但是有什麼方法可以修復makefile嗎?它說主函數中每次使用Student1或Course1時出現同樣的錯誤。

+3

應該是'INT主要()' –

+0

你忘了主要返回類型。 – NathanOliver

+0

順便說一句,顯示你的'Makefile'或者至少是編譯命令'#include「list.cpp」' - 包括一個函數裏面的'cpp'? –

回答

0

main()::Student表示您的Student結構在main內部聲明。 struct函數內的聲明非常罕見,在你的情況下這是一個錯誤。它是由

#include "list.cpp" 

在您的main函數。

你應該在你的函數之外聲明struct。要做到這一點,將你的#include指令,所以它的前main

#include "function.h" 
#include "list.cpp" 
... 
int main() 
{ 
    ... 
} 
+4

另一方面,你應該永遠不要'#include'一個.cpp文件。 –

-1

所有功能必須返回類型在C/C++(如果返回任何內容,那麼它應該是無效的),並且主要功能必須返回一個整數,以便操作系統可以讀取返回的數字並確定程序是否成功執行。 (如果返回作爲返回的主要功能OS認爲非0數字,程序沒有正常執行)

因此,代碼應該如下

#include "header.h" 
#include "function.h" 

int main() 
{ 

    int input = 0; 
    bool loop = 1; 

    #include "list.cpp" 

    ResetArray(arrayCou, arrayStu); 

    while (loop) 
    { 
     cout << "cmd> "; 
     cin >> input; 
     switch (input) 
     { 
      case 1: 
       AddCourse(&Course1, arrayCou); 
       break; 
      case 2: 
       AddStudent(&Student1, arrayStu); 
       break; 
      case 3: 
       AddStuCourse(&Student1, &Course1, arrayStu, arrayCou); 
       break; 
      case 4: 
       AddGrade(&Student1, &Course1, arrayStu, arrayCou); 
       break; 
      case 5: 
       PrintCourse(&Student1, &Course1, arrayStu, arrayCou); 
       break; 
      case 6: 
       PrintStudent(&Student1, &Course1, arrayStu, arrayCou); 
       break; 
      case 7: 
       PrintStuCourse(&Student1, &Course1, arrayStu, arrayCou); 
       break; 
      case 8: 
       AvgStuCourse(&Student1, &Course1, arrayStu, arrayCou); 
       break; 
      case 9: 
       loop = 0; 
       break; 
      default: 
       break; 
     } 
    } 
} 
+4

你有什麼改變,它是如何解決這個錯誤的? – anatolyg

+0

所有的函數必須在c/C++中有返回類型(如果沒有被返回,那麼它應該是void),並且main函數必須返回一個整數,以便OS可以讀取返回的數字並確定程序是否成功執行。 (如果返回非0號碼作爲主函數中的返回操作系統認爲程序沒有正常執行) –

+0

如果您明確聲明原始代碼中存在的錯誤,這將非常有用。 – Galik