表达式必须具有类类型,这是在将dot(。)运算符用于访问对象的属性时,在指向对象的指针上使用时引发的错误。
Dot(’。’)运算符基本上用于访问对象的字段和方法,但是在这种情况下,如果在指向对象的指针上使用点运算符,则会显示错误“表达式必须具有类” 。
在这种情况下,当在类类型对象的指针上使用Dot(’。’)运算符时, Dot(’。’)运算符会尝试查找指针类型的字段和方法,但实际上它们并不存在,因此,我们得到这个错误。
下面是下面的代码来说明上述错误:
C++
// C++ program to illustrate the
// Expression must have class
// type error
#include
using namespace std;
// Class
class GeeksforGeeks {
public:
// Function to display message
void showMyName()
{
cout << "Welcome to GeeksforGeeks!";
}
};
// Driver Code
int main()
{
// Object of the class
GeeksforGeeks* p = new GeeksforGeeks();
// Member function call
p.showMyName();
return 0;
}
C++
// C++ program to illustrate how to
// solve Expression must have class
// type error
#include
using namespace std;
// Class
class GeeksforGeeks {
public:
// Function to display message
void showMyName()
{
cout << "Welcome to GeeksforGeeks!";
}
};
// Driver Code
int main()
{
// Object of the class
GeeksforGeeks p;
// Member function call
p.showMyName();
return 0;
}
输出:
如何解决这个错误?
为了解决上述错误,我们的想法是在不使用new运算符的情况下初始化该类,即,不要将对象初始化为“ className * obj = new className()” ,而应将其初始化为“ className obj”以访问该函数的成员函数。使用dot(’。’)运算符。下面是说明相同内容的程序:
C++
// C++ program to illustrate how to
// solve Expression must have class
// type error
#include
using namespace std;
// Class
class GeeksforGeeks {
public:
// Function to display message
void showMyName()
{
cout << "Welcome to GeeksforGeeks!";
}
};
// Driver Code
int main()
{
// Object of the class
GeeksforGeeks p;
// Member function call
p.showMyName();
return 0;
}
输出:
Welcome to GeeksforGeeks!
要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程” 。