错误C2679:二进制' =' :没有找到哪个操作符采用类型'学校*'的右手操作数。 (或者没有可接受的转换)

时间:2014-12-10 19:44:20

标签: c++ arrays pointers constructor

我正在尝试学习如何使用数组/指针访问构造函数。 我知道如何访问类成员函数,但我仍然坚持如何访问构造函数。

这个程序: 1.询问学校数量。 2.询问学校名称。 3.显示每个学校名称。

#include<iostream>
#include<string>
using namespace std;

class School
{
public:
    School(string name = "")
    {   schoolname = name;}

    void Display()
    {   cout << "School name is " << schoolname;}

private:
    string schoolname;
};

int main()
{
    string sname;
    int schoolNO;
    School *myschool;
    myschool[10];

    cout << "Enter number of school : ";
    cin >> schoolNO;

    for (int i = 0; i < schoolNO; i++)
    {
        cout << "Enter school name : ";
        cin >> sname;

        myschool[i] = new School(sname);*//The error stated is in this line...*
        myschool[i].Display();
    }
}

2 个答案:

答案 0 :(得分:3)

问题是mySchool是一个对象数组,而不是指针数组,所以你不能使用new指定一个指向它的元素的指针。

替换它:

School *myschool;
myschool[10];

为此:

School* myschool[10];

现在你有一个指针数组,new将起作用。

答案 1 :(得分:3)

您的错误与构造函数无关。它与变量mySchool

的错误声明有关

您在设置阵列时所做的工作无效。你想要一个大小为10 pointers to School objects的数组。您创建了myschool作为pointer to a school。此外myschool[10];无效。

所以你需要将School *myschool的声明更改为School *myschools[10];你还应该删除我上面提到的错误陈述。

进一步,强烈建议选择引用其建模对象多样性的名称。 myschool并非用于指向或存储单个学校;它是多个对象的容器。考虑将其命名为schoolsmyschools,以便向使用它的人明确说明对象的多样性。