代码编译错误
Compile Error with Code
我的代码遇到了一些奇怪的编译器错误。我已经粘贴了下面的代码和类定义。我尝试过谷歌搜索它,但无济于事;我唯一得到的是我的 Grade 构造函数在某处出错。
这些是构建错误:
Evalution.cpp: In constructor ‘Evaluation::Evaluation(char*, Grade*)’:
Evalution.cpp:20:55: error: no match for call to ‘(Grade) (char [30], double*)’
Grades[num](Graded[num].comments,&Graded[num].mark);
这是评估的定义:
#include <iostream>
#include <cstring>
#include "Evalution.h"
Evaluation::Evaluation(){
code[0]=' ';
for(int num=0;num<50;num++)
Grades[num];
}
Evaluation::Evaluation(char coursecode[],Grade Graded[]){
if(coursecode[0]=' '&& strlen(coursecode) !=6) {
for(int num=0;num<50;num++){
if(Graded[num].mark < 0)
Evaluation();
numgrades=num;
}
}
else{
strcpy(code,coursecode);
for(int num=0;num < 50; num++) {
Grades[num](Graded[num].comments,&Graded[num].mark);
numgrades=num;
}
}
}
bool Evaluation::empty()const{
if(code[0]==' '){
for(int num=0;num<numgrades;num++){
if(Grades[num].mark < 0)
return true;
}
}
else
return false;
}
float Evaluation::calculateAverage() const{
float total=0;
for(int num=0;num<=numgrades;num++)
total+=Grades[num].mark;
return total/numgrades;
}
void Evaluation::display(std::ostream& os) const{
if(empty())
return;
else{
float average=calculateAverage();
os<< code << average <<endl;
for(int num=0;num<=numgrades;num++)
Grades[num].display(std::cout);
}
}
bool operator<(const Evaluation& tested, double pass){
float average=tested.calculateAverage();
if (average < pass)
return true;
else
return false;
}
std::ostream& operator<<(std::ostream& os, const Evaluation& input){
os<<input.display(&os);
}
这是Grade的定义:
#include <iostream>
#include "Grade.h"
#include <cstring>
using namespace std;
Grade::Grade(){
mark = 0;
comments[0] = ' ';
}
Grade::Grade(char commented[], double &marked){
if (commented == ' ' && marked < 0)
Grade();
else{
strcpy(comments, commented);
mark = marked;
}
}
double Grade::get() const{
return mark;
}
void Grade::display(std::ostream& os) const{
os << mark <<"-"<< comments << endl;
}
另外,如果评估类中有任何逻辑问题,请告诉我。我现在收到以下链接器错误:
/tmp/cc1F2Crw.o: In function `main':
15 w7part2.cpp:(.text+0x44): undefined reference to `Grade::Grade(char*, double)'
16 w7part2.cpp:(.text+0x6e): undefined reference to `Grade::Grade(char*, double)'
17 w7part2.cpp:(.text+0x98): undefined reference to `Grade::Grade(char*, double)'
18 w7part2.cpp:(.text+0xb3): undefined reference to `Evaluation::Evaluation(char*, Grade*)'
19 w7part2.cpp:(.text+0xc7): undefined reference to `Evaluation::display(std::ostream&) const'
20 w7part2.cpp:(.text+0xef): undefined reference to `operator<(Evaluation const&, double)'
21 collect2: error: ld returned 1 exit status
我怀疑你的意思是说
Grades[num] = Grade(Graded[num].comments, Graded[num].mark);
而不是
Grades[num](Graded[num].comments,&Graded[num].mark);
现在,让我尝试以圆形的方式解释语法错误。如果你有这样的课程:
class foo
{
public:
void operator()(int, int) {}
};
您可以使用:
Foo foos[10];
foos[0](10, 20); // This calls the operator() function of the class.
在您的声明中,您有:
Grades[num](Graded[num].comments,&Graded[num].mark);
^^ Like foos[num]
Grades[num](Graded[num].comments,&Graded[num].mark);
^^ Like (10, 20)
由于Grade
没有这样的函数,编译器会让你知道这一点,但用一种你来说并不明显的语言。
编辑
现在我想了想,我不确定你想做什么。如果您使用:
Grades[num] = Grade(Graded[num].comments, Graded[num].mark);
这与自我分配是一回事。
编辑 2
若要处理第二条错误消息,请使用:
// Evaluation::display(...) returns void.
// Can't use:
// os<<input.display(...);
// Also, lose the & from the argument.
input.display(os);
而不是
os<<input.display(&os);
相关文章:
- 用MacOS Mojave编译C++:致命错误:mpi.h:没有这样的文件或目录
- std::is_base_of表示ctor编译错误
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- Qt5:使用QCommandLineParser类时出现奇怪的编译错误
- Qt Cmake 错误编译"GuiSupportQt not found"
- Opengl 精度转换错误编译错误 E0415
- 库将ARM架构错误编译为架构X64
- RT 音频 Mac 错误 g++ 编译错误
- 错误编译Boost.log
- 错误编译QT创建者 / QT窗口小部件示例
- 错误编译MIPS32
- Visual Studio 2013 中的错误(编译和运行代码)
- 链接错误编译qt项目在visual 2010
- 无法用模板错误编译nsgmls
- 奇怪的错误.编译失败
- 如果有人调用c++中的方法,则强制错误(编译时)
- 来自autoconf测试的错误编译命令
- 时间限制超出错误C++编译
- SFML 2.3 和 CodeBlocks 错误编译