Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
identifikátor: jiné položky než agregace nelze inicializovat pomocí seznamu inicializátorů.
Poznámky
Identifikátor agregace byl nesprávně inicializován.
Agregace jsou definovány takto:
Pole
Třídy, struktury a sjednocení, které nemají:
Konstruktory
Soukromé nebo chráněné členy
Základní třídy
Virtuální funkce
Jazyk Visual C++ navíc neumožňuje používat v agregaci datové typy, které obsahují konstruktory.
Následují důvody, proč se při pokusu o inicializaci agregace u určitého typu může zobrazit upozornění C2552:
Typ má jeden nebo více uživatelem definovaných konstruktorů.
Typ má jeden nebo více nestatických soukromých datových členů.
Typ má jednu nebo více virtuálních funkcí.
Typ má základní třídu.
Typ je třída ref nebo rozhraní CLR.
Typ má pole nefixního rozměru (nulové pole), jehož prvky mají destruktory.
Example
Následující příklad vygeneruje 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);
}