2013-04-09 97 views
-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; 
} 
+0

你真的可以通過刪除所有不相關的代碼來改善這個問題。 – juanchopanza 2013-04-09 12:08:41

+0

你是對的juanchopanza,但函數'fetch_id()'和'fetch_name()'是重要的,因爲他試圖改變結構的數據。 – Zaiborg 2013-04-09 12:10:42

+0

當代碼運行良好時,它現在也應該這樣做。如果你不想表達什麼是明天的狀態,你可以告訴今天的變化。 – harper 2013-04-09 12:13:28

回答

5

這是因爲你的結構包含常量數組。它們必須在構造函數初始化列表中顯式初始化。

由於這些常量成員變量,編譯器無法爲您生成默認構造函數,所以您必須自己創建一個構造函數。

實際上,我認爲你會在代碼後期試圖分配給它們時錯誤地使數組不變,因爲它們是不變的。

刪除const部分的成員數組聲明,它應該都會更好。

+0

謝謝你..得到它.. :) – 2013-04-11 10:34:46

+0

好的我已經完成了.. 謝謝大家.. – 2013-04-11 16:24:57

0

一些簡單的問題......爲什麼你使用2維字符數組,爲什麼不是std::string而不是? cin的事情是,你沒有控制輸入的長度,所以你會很快得到緩衝區溢出。 soo long zap

+0

是的,我會盡力..謝謝指出這.. – 2013-04-11 10:36:02