c++ 非静态成员引用必须与特定对象相对
#include <iostream>using namespace::std;
static const char GRADES[] = { 'F', 'F', 'F', 'F', 'F', 'F', 'D', 'C', 'B', 'A', 'A' };
class Grade
{
public:
char ltr;
int prct;
Grade()
{
ltr = 'A';
prct = 0;
}
void GradePrct(Grade *grade, int prct);
void GradeLtr(Grade *grade, char ltr);
void printGrade(Grade *grade);
};
void Grade::GradePrct(Grade *grade, int prct)
{
grade->prct = prct;
grade->ltr = GRADES;
}
void Grade::GradeLtr(Grade *grade, char ltr)
{
grade->ltr = ltr;
grade->prct = 100 - (ltr - 'A') * 10 - 5;
}
void Grade::printGrade(Grade *grade)
{
cout << "Grade:" << grade->prct << "->" << grade->ltr << endl;
}
int main()
{
Grade g;
int prct;
char c;
cout << "Input two space seprated grades (1st in %%, 2nd in letter): ";
cin >> prct;
cin >> c;
g.prct = prct;
Grade::GradePrct(&g, prct); //报错 非静态成员引用必须与特定对象相对
Grade::printGrade(&g); //报错
Grade::GradeLtr(&g, c); //报错
Grade::printGrade(&g); //报错
return 0;
}
这是一个用来分数和等第转换的c++程序,如果把报错这几行里的Grade::去掉,把类函数那里的Grade::也都去掉,就不报错可以运行,但是加上了Grade::就报错,说非静态成员引用必须与特定对象相对,想知道原因,和怎么改?
int main()
{
Grade g;
int prct;
char c;
cout << "Input two space seprated grades (1st in %%, 2nd in letter): ";
cin >> prct;
cin >> c;
g.prct = prct;
g.GradePrct(&g, prct); //
g.printGrade(&g); //
g.GradeLtr(&g, c); //
g.printGrade(&g); //
return 0;
}
[\b]
根据我的理解
在C++面向对象的机制中,静态成员可以用类本身调用也可以用类的对象调用(推荐用类本身调用,因为静态成员是这个类的所有对象共享的),而非静态成员(也就是前面没有static关键字修饰的)只能用类的对象调用。
所以楼主这里应该用“.”操作符, 对象.非静态成员来调用。
不知道我说明白没有 楼主可以认真看一下小甲鱼C++的21、22讲 :lol: 加上了Grade:: 要设定为静态函数才行
页:
[1]