将指针数组传递给类对象

时间:2017-03-01 02:26:56

标签: c++ arrays class pointers

希望有人可以帮助初学者。我搜索过,但有些解决方案超出了我的知识范围。我试图创建一个函数,该函数将接收一个指向类对象的指针数组,并为每个对象输出getName()函数。但我一直得到一个" 没有重载功能的实例"。我无法弄清问题是什么。请看下面的代码。

#include <iostream>
#include "Student.hpp"
#include <string>
using namespace std; 

void getName(Student *studentArray[], int); //prototype                 

int main()
{           
    //Creates class objects with Constructors Name and Score
    //Class object has a function getName() to return name 
    Student stud1("John", 100);
    Student stud2("Mary", 90);
    Student stud3 ("Jack", 85);

    //Create an array of student objects 
    Student myArray[3]= {stud1, stud2, stud3};

    //ERROR HERE NO INSTANCE OF OVERLOADED FUNCTON
    getName(myArray, 3) 

    return 0;        
}

void getName(Student *studentsArray[], int arraySize)
{    
    for(int index=0; index < arraySize; index++)
    {
        cout << studentsArray[index]->getName() << endl;        
    }
}

3 个答案:

答案 0 :(得分:0)

Student *studentsArray[]是一系列指向学生的指针:

[ - &GT; &#34; John&#34;, - &gt; &#34; Mary&#34;, - &gt; &#34;杰克&#34;]

虽然Student *studentsArray是指向学生的指针(例如,数组中的第一个):

- &GT; [&#34; John&#34;,&#34; Mary&#34;,&#34; Jack&#34; ]

使用[]运算符,您可以跳转到相对于指针

的偏移量
studentsArray[0] == (*studentsArray)
studentsArray[1] == *(studentsArray+1)
studentsArray[2] == *(studentsArray+2)

并且->运算符是(*var).

的语法糖

问题是你创建了一个学生数组而不是一系列学生指针:

Student myArray[3] = {stud1, stud2, stud3};

实际应该是

Student* myArray[3] = { &stud1, &stud2, &stud3 };

以下是一个完整的工作示例:

#include <iostream>
#include "Student.hpp"
#include <string>
using namespace std;

void getName(Student *studentsArray[], int); //prototype 

int main()
{

    //Creates class objects with Constructors Name and Score
    //Class object has a function getName() to return name 
    Student stud1("John", 100);
    Student stud2("Mary", 90);
    Student stud3("Jack", 85);

    //Create an array of student objects 
    Student* myArray[3] = { &stud1, &stud2, &stud3 };

    getName(myArray, 3);
    return 0;
}

void getName(Student *studentsArray[], int arraySize)
{

    for (int index = 0; index < arraySize; index++)
    {
        cout << studentsArray[index]->getName() << endl;

    }
}

答案 1 :(得分:0)

最重要的是你的指针实际上并不指向任何现有变量或其地址。在这种情况下,指针将改为指向一个随机选择的存储单元地址,因此它真的很危险,因为你永远不知道它会导致什么,包括数据丢失,内存泄漏等等。

答案 2 :(得分:0)

使用find "$PWD" ,它将类似于:

std::vector