直到明天该代码工作正常但是知道它给出了一个奇怪的错误..
没有可用的默认构造函数。
我真的不明白这个错误..而且这是第一次遇到这种类型的错误..我已经搜索了问题,但关于构造函数的讨论是高级的..
我是中级,, ..
请帮忙检查我的代码.. !!!
// 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;
}
答案 0 :(得分:5)
这是因为你的结构包含常量数组。它们必须在构造函数初始化列表中显式初始化。
由于这些常量成员变量,编译器无法为您生成默认构造函数,因此您必须自己创建一个。
实际上,我认为你错误地使数组变得不变,因为你后来在代码中尝试分配它们,这是因为它们是不变的而无法完成。
删除成员数组声明的const
部分,它应该都能更好地工作。
答案 1 :(得分:0)
一些简单的问题...为什么使用二维char数组,为什么不使用std::string
?
cin
的问题是,您无法控制输入的长度,因此很快就会出现缓冲区溢出。
soo long zap