编译器错误 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 语言中,可以使用点运算符访问托管类的成员,指向 C++ 中对象的指针意味着你需要使用 -> 运算符来访问该成员:

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

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