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 源代码时出错