-2

直到明天代码运行良好但知道它给出了一个奇怪的错误..没有可用的默认构造函数..
我真的不明白这个错误..而且这是第一次遇到这种类型的错误..我已经搜索过问题但是关于构造函数的讨论是高级水平..我是中级,,..请帮助检查我的代码.. !!!

// error.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
#include <string>

using namespace std;

struct Student
{
    const char name[6][11];
    const int id[5];
};


void fetch_id(Student& s, const int size)
{
    for (int i = 0; i < size; i++)
    {
        cout << "roll no of student: " << i+1 << endl;;
        cin >> s.id[i];
    }

}
void fetch_name(Student& s, const int size)
{

        for (int j = 0; j < size; j++)
        {

            cin.getline(s.name[j], 10);
            cout <<"name of student: " << j+1 << endl;  
        }

}

void display_name(Student s, const int size)
{
    cout << "Student Names Are" << endl;
    for (int i = 0; i < size; i++)
    {           
        if ( s.name[i] != '\0' )
        cout << s.name[i] << endl;
    }
}

void display_id(Student s, const int size)
{
    cout << "Roll Numbers Are" << endl;
    for (int i = 0; i < size; i++)
    {
        cout << s.id[i] << " || ";
    }
}

int main()
{

    const int size = 5;
    Student s; //  error C2512: 'Student' : no appropriate default constructor available ??
    fetch_id(s, size);
    display_id(s, size);
    cout << '\n';
    fetch_name(s, size);
    cout << '\n';
    display_name(s, size);
    system("Pause");
    return 0;
}
4

2 回答 2

5

这是因为您的结构包含常量数组。它们必须在构造函数初始化列表中显式初始化。

由于这些常量成员变量,编译器无法为您生成默认构造函数,您必须自己创建一个。

实际上,我认为您在稍后在代码中尝试分配给它们时错误地使数组保持不变,这是由于它们是不变的而无法完成的。

删除const成员数组声明的一部分,它应该会更好地工作。

于 2013-04-09T12:02:39.733 回答
0

一些简单的问题......你为什么使用二维字符数组,为什么不std::string呢?问题cin是,您无法控制输入的长度,因此您很快就会遇到缓冲区溢出。好久不见

于 2013-04-09T12:13:24.383 回答