Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
"идентификатор": инициализация не агрегированных данных с помощью списка инициализации не допускается
Замечания
Идентификатор агрегата был неверно инициализирован.
Агрегаты определяются следующим образом:
Массивы
классы, структуры и объединения, у которых нет:
Конструкторы
закрытых или защищенных членов;
Базовые классы
Виртуальные функции
Кроме того, в Visual C++ в агрегатах не допускаются типы данных, содержащие конструкторы.
Ниже приведены причины, из-за которых при попытке инициализации агрегата для типа может возникнуть ошибка C2552:
Тип имеет один или несколько пользовательских конструкторов.
Тип имеет один или несколько нестатических, закрытых данных-членов.
Тип имеет одну или несколько виртуальных функций.
Тип имеет базовый класс.
Тип является классом ссылки или интерфейсом среды CLR.
Тим включает массив нефиксированного размера (нулевой массив), элементы которого имеют деструкторы.
Example
В следующем примере создается C2552:
// C2552.cpp
// compile with: /clr
#include <string>
using namespace std;
struct Pair_Incorrect {
private:
string m_name;
double m_val;
};
struct Pair_Correct1 {
public:
Pair_Correct1(string name, double val)
: m_name(name), m_val(val) {}
private:
string m_name;
double m_val;
};
struct Pair_Correct2 {
public:
string m_name;
double m_val;
};
int main() {
// To fix, add a constructor to this class and use it for
// initializing the data members, see Pair_Correct1 (below)
// or
// Do not have any private or protected non-static data members,
// see Pair_Correct2 (below). Pair_Correct2 is not recommended in
// case your object model requires some non-static data members to
// be private or protected
string name("John");
Pair_Incorrect pair1 = { name, 0.0 }; // C2552
// initialize a CLR immutable value type that has a constructor
System::DateTime dt = {2001, 4, 12, 22, 16, 49, 844}; // C2552
Pair_Correct1 pair2( name, 0.0 );
Pair_Correct1 pair3 = Pair_Correct1( name, 0.0 );
Pair_Correct2 pair4 = { name, 0.0 };
System::DateTime dt2(2001, 4, 12, 22, 16, 49, 844);
}