Поделиться через


Ошибка компилятора C2228

слева от ".identifier" должен быть указан класс, структура или объединение

Операнд слева от периода (.) не является классом, структурой или объединением.

Следующий пример приводит к возникновению ошибки 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
}

Эта ошибка также возникает из-за неправильного синтаксиса при использовании управляемых расширений. В то время как в других языках Visual Studio можно использовать оператор dot для доступа к члену управляемого класса, указатель на объект в C++ означает, что необходимо использовать оператор -> для доступа к члену:

Неправильно: String * myString = checkedListBox1->CheckedItems->Item[0].ToString();

Правильно: String * myString = checkedListBox1->CheckedItems->Item[0]->ToString();