2015-10-25 6 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 IntelliSense : слишком много значений инициализатора. Когда я удаляю bool valid и int ID, программы работают. Почему это так?ошибка C2440: «инициализации»: не удается преобразовать из «инициализатора-лист»

ответ

2

Вы получаете ошибку, потому что пытаетесь инициализировать TDate из списка инициализации агрегата. Этого нельзя сделать, если у этого типа есть частные члены (например, в вашем случае ID и valid).

Вы можете обойти это, предоставив конструктор для своей структуры из трех 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 (обычно я бы никогда не ссылался на microsoft, но вопрос был отмечен visual-studio). Вы должны иметь возможность использовать список инициализаторов для инициализации членов структуры в порядке объявления. Я не могу заставить его работать, хотя. – MatrixManAtYrService

Смежные вопросы