在C++中遇到对象和类的问题

在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

因此,我在'Student'类中定义了displayStudInfo方法,并在main函数中调用它。但是我得到的错误函数没有在这个范围内声明。谁能告诉我为什么会发生这种情况,我能做些什么来解决这个问题

#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();
}