2015-10-25 259 views
4
#include<iostream> 
using namespace std; 
struct TDate 
{ 
    int day, month, year; 
    void Readfromkb() 
    { 
     cout << "\n ENTER DAY MONTH YEAR\n"; 
     cin >> day >> month >> year; 
    } 
    void print() 
    { 
     cout << day << month << year; 
    } 
    private: 
     int ID; 
     bool valid; 

}; 
int main() 
{ 
    TDate t1, t2,t3={ 1, 2, 3 }; 
    t1.Readfromkb(); 
    t1.print(); 
    cin.ignore(); 
    cin.get(); 
    return 0; 

} 

爲什麼我得到錯誤1錯誤C2440:「初始化」:無法從「初始化列表」到「TDate」和2智能感知轉換:太多的初始化值。當我刪除布爾有效和int ID的程序工作。爲什麼這樣?錯誤C2440:「初始化」:無法從「初始清單」轉換

回答

2

由於您試圖從聚合初始化列表中初始化TDate,您正在收到此錯誤。當類型有私人成員時(例如,在您的情況下,這是不可能的,IDvalid)。

您可以通過從三個int s和使用TDate t1, t2, t3(1, 2, 3)爲您的結構提供構造函數來解決此問題。

1

要做到t3={ 1, 2, 3 };你必須做出TDate的構造函數有三個參數,就像這樣:

TDate(int i, int i1, int i2); 

,並使用實現它:

TDate::TDate(int i, int i1, int i2) { 

} 

如果你不想創建構造函數,然後創建如下對象:

TDate t1 = TDate(); 
+1

本文另有說明:https://msdn.microsoft.com/en-u s/library/mt179298.aspx(通常我不會引用微軟,但問題是標記爲visual-studio)。您應該能夠使用初始化程序列表按聲明的順序初始化結構成員。儘管如此,我無法讓它工作。 – MatrixManAtYrService

相關問題