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

Posted

技术标签:

【中文标题】c++ makefile 编译出错,无法转换 main()::【英文标题】:c++ error with makefile compile, could not convert main():: 【发布时间】:2016-02-24 17:03:43 【问题描述】:

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

我得到的错误是:

HW1.cpp:45:55:错误:无法将“Student1”从“main()::Student”转换为“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 都会出现相同的错误。

【问题讨论】:

应该是int main() 你忘记了 main 的返回类型。 顺便说一句,显示您的Makefile 或至少显示编译命令 #include "list.cpp" - 在函数中包含cpp?真的吗? 顺便说一句,您的头文件似乎没有include guards。如果是这样,请在尝试其他任何操作之前添加它们。 【参考方案1】:

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

#include "list.cpp"

在您的 main 函数中。

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

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

    ...

【讨论】:

另一方面,您可能永远不应该#include .cpp 文件。【参考方案2】:

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

【讨论】:

所有函数都必须有 c/c++ 中的返回类型(如果没有返回则它应该是 void ),并且 main 函数必须返回一个整数,以便操作系统可以读取返回的数字并确定程序是否成功执行。 (如果你在主函数中返回非 0 数字,操作系统认为程序没有正常执行) 如果你明确指出原始代码中存在的错误会很有用。 @meetthakkar 您应该在文本中添加您所做的答案。 @meetthakkar 这真的需要在你的回答中

以上是关于c++ makefile 编译出错,无法转换 main()::的主要内容,如果未能解决你的问题,请参考以下文章

使用 Makefile 编译使用图像的 FLTK 源代码时出错

了解 Makefile。 make 无法链接犰狳库

linux 中make命令出错是怎么回事了

使用makefile动态编译c++代码

postfix编译出错呀 pcre 语法错 是Makefile的错吗

Makefile 初探