Udostępnij przez


Błąd kompilatora C2228

z lewej strony ".identifier" musi mieć klasę/strukturę/unię

Uwagi

Operand z lewej strony kropki (.) nie jest klasą, strukturą ani związkiem.

Example

Poniższy przykład generuje C2228:

// C2228.cpp
int i;
struct S {
public:
    int member;
} s, *ps = &s;

int main() {
   i.member = 0;   // C2228 i is not a class type
   ps.member = 0;  // C2228 ps is a pointer to a structure

   s.member = 0;   // s is a structure type
   ps->member = 0; // ps points to a structure S
}

Ten błąd zostanie również wyświetlony, jeśli używasz nieprawidłowej składni podczas korzystania z rozszerzeń zarządzanych. Podczas gdy w innych językach programu Visual Studio możesz użyć operatora kropki, aby uzyskać dostęp do składowej klasy zarządzanej, wskaźnik do obiektu w języku C++ oznacza, że musisz użyć operatora -> w celu uzyskania dostępu do elementu członkowskiego:

Błędny: String * myString = checkedListBox1->CheckedItems->Item[0].ToString();

Prawy: String * myString = checkedListBox1->CheckedItems->Item[0]->ToString();