makefile编译时出现c ++错误,无法转换main()::

时间:2016-02-24 17:03:44

标签: c++ makefile

我正在研究这个项目,这是我第一次使用makefile。

我得到的错误是:

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时都会出现相同的错误。

2 个答案:

答案 0 :(得分:0)

main()::Student表示您的Student结构在main内声明。函数内部的struct声明非常常见,在您的情况下,这是一个错误。它是由

引起的
#include "list.cpp"

main函数中。

您应该在函数外声明struct。为此,请在#include之前移动main指令:

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

答案 1 :(得分:-1)

所有函数必须在c / c ++中有返回类型(如果没有返回则应该为void),并且main函数必须返回一个整数,以便OS可以读取返回的数字并确定程序是否成功执行或不。 (如果在主函数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;
        }
    }
}