2016-03-06 84 views
-1

这里我从基类GradedActivity中创建了一个名为Essay的派生类。我在主要被调用的对象中创建了一个Essay类的对象。当我在main()中编写object.setGrammar(grammarPts)时,我希望能够在setGrammar()函数的变量语法中提供分数。我究竟做错了什么?谢谢! 我得到一个错误:类继承和使用setter和getters

99 8 F:\ lab6part3.cpp [错误]请求'对象'中的成员'setGrammar',它是非类类型'Essay(float,float,float,float) '

#include <iostream> 

using namespace std; 


//class gradedactivity (page 900) 
class GradedActivity 
{ 
protected: 

double score; 

public: 
//default constructor 
GradedActivity() 
{ 
score = 0.0; 
} 
//parameterized constructor 
GradedActivity(double s) 
{ 
score = s; 
} 

setScore(double s) 
{ 
score = s; 
} 

double getScore() const 
{ 
return score; 
} 

char getLetterGrade() const; 
}; 

class Essay : public GradedActivity 
{ 
private: 

float grammar; 
float spelling; 
float length; 
float content; 

public: 

Essay(float g, float s, float l, float c) 
{ 
setGrammar(g); 
setSpelling(s); 
setLength(l); 
setContent(c); 
} 

void setGrammar(float); 
float getGrammar(); 
void setSpelling(float); 
float getSpelling(); 
void setLength(float); 
float getLength(); 
void setContent(float); 
float getContent(); 
}; 

void Essay::setGrammar(float g) 
{ 
grammar = g; 
} 
float Essay::getGrammar() {return grammar;} 

void Essay::setSpelling(float s) 
{ 
spelling = s; 
} 
float Essay::getSpelling() {return spelling;} 

void Essay::setLength(float l) 
{ 
length = l; 
} 
float Essay::getLength() {return length;} 

void Essay::setContent(float c) 
{ 
content = c; 
} 
float Essay::getContent() {return content;} 

int main() 
{ 
float grammarPts; 

cout << "How many points, out of 30, did the student get for grammar?"; 
cin >> grammarPts; 

Essay object; 
object.setGrammar(grammarPts); 

return 0; 
} 
+1

你能否在你的硬盘上多付几个字节并使用缩进? – LogicStuff

+0

在这个例子中,我没有看到你需要继承GradedActivity的原因。至少在代码的和平中,没有实际的用法。 – Joel

+0

您在'setScore'之前错过了'void',并且'Essay'没有生成默认的构造函数。 – LogicStuff

回答

0

这可能只是因为您从未为Essay定义了默认构造函数。

无论如何,我定义了一个默认构造函数,并且您的代码运行良好,因此可能是问题所在。 https://ideone.com/yNxV8N

+1

不是默认构造不会导致UB,但会产生编译时错误。 – LogicStuff

+0

不应该在没有添加默认构造函数的情况下进行编译。 – LogicStuff

+0

大多数编译器会插入一个默认的构造函数,所以没有定义一个会导致未定义的行为,因为你的代码可能编译或不编译 – NickLamp