在C++中遇到对象和类的问题
因此,我在'Student'类中定义了displayStudInfo方法,并在main函数中调用它。但是我得到的错误函数没有在这个范围内声明。谁能告诉我为什么会发生这种情况,我能做些什么来解决这个问题在C++中遇到对象和类的问题,c++,class,c++11,object,c++14,C++,Class,C++11,Object,C++14,因此,我在'Student'类中定义了displayStudInfo方法,并在main函数中调用它。但是我得到的错误函数没有在这个范围内声明。谁能告诉我为什么会发生这种情况,我能做些什么来解决这个问题 #include <iostream> #include <string> using namespace std; class Student{ public: int age; string name; void enterInfo
#include <iostream>
#include <string>
using namespace std;
class Student{
public:
int age;
string name;
void enterInfo(){
cout << "Enter your age = " ; cin >> age;
cout << "Enter your name = "; cin >> name;
}
void displayStudInfo(Student s)
{
cout << "Age = " << s.age << ", name=" << s.name << endl;
}
};
int main(){
int size;
Student stud[100];
Student abir;
abir.enterInfo();
displayStudInfo(abir);
}
<>在C++中,所有成员函数隐式地接收指向当前对象的参数。此参数是默认值 因此,在函数displayStudInfo的定义中为对象指定一个额外的显式参数是没有意义的 将函数定义重写为
void displayStudInfo()
{
cout << "Age = " << age << ", name=" << name << endl;
}
并称之为
abir.displayStudInfo
而不是
显示studinfoabir
或者,您可以将函数displayStudInfo设置为非成员函数,方法是将其置于类Student的声明之外。在这种情况下,您必须保留显式参数,因为该参数仅隐式传递给成员函数。void displayStudInfoStudent隐藏在侧类中。
因此,它主要是不可访问的
尝试:
在您的例子中,void display studinfo Student s是Student的一个成员函数,因此您必须在Student的实例上调用它,就像您对enterInfo所做的那样
你可以用不同的方法来解决这个问题。一种方法是将成员函数移出学生的身体,使其成为自由函数
让displayStudInfo成为朋友?请注意,非静态成员函数总是会得到一个您可能没有注意到的附加参数-之前注意到的对象。或->在对象指针的情况下。例如,abir.enterInfo;-abir是调用成员函数enterInfo的对象,并成为函数的内部对象。因此,所有成员变量都可以通过这个隐式或显式访问:cin>>age;实际上与cin>>此->年龄;相同;。您确定displayStudInfo应该有一个参数Student s吗?通过调用object上的方法并传递相同的参数来显示object的值有什么意义?
void displayStudInfo()
{
cout << "Age = " << age << ", name=" << name << endl;
}
abir.displayStudInfo();
class Student{
public:
// …
};
void displayStudInfo(Student s)
{
cout << "Age = " << s.age << ", name=" << s.name << endl;
}
int main(){
// …
displayStudInfo(abir);
}
class Student{
public:
// …
void displayStudInfo()
{
cout << "Age = " << age << ", name=" << name << endl;
}
};
int main(){
// …
abir.displayStudInfo();
}