c++ - 通过 "pointers to class members"访问作为数组的类成员

标签 c++ class pointers

我写了下面的代码来探索类成员的指针:

#include <iostream>
#include <cstring>
#include <cstdlib>
using namespace std;

class Sample{
    public:
        int i;
        char name[35];
        char* City;

        Sample(int i,const char* ptr,const char* addr):i(i){
            strncpy(name,ptr,35);
            City= (char*) malloc(strlen(addr)*sizeof(char));
            strcpy(City,addr);
        }
};

int main()
{
    Sample Ob1(1,"Andrew Thomas","Glasgow");
    cout << Ob1.i << " : " << Ob1.name << " lives at : "<< (Ob1.City)<< endl;
    int Sample::*FI=&Sample::i;
    char* Sample::*FCity= &Sample::City;
    char* Sample::*FName=  &Sample::name;

    cout << Ob1.*FI << endl;
    cout << Ob1.*FCity << endl;
    cout << Ob1.*FName << endl;

    return 0;
}

我收到 char* Sample::*FName= &Sample::name; 的错误,如下所示:

$ g++ -Wall ExploreGDB.cpp -o ExploreGDB
ExploreGDB.cpp: In function ‘int main()’:
ExploreGDB.cpp:28:34: error: cannot convert ‘char (Sample::*)[35]’ to ‘char* Sample::*’ in initialization
  char* Sample::*FName=  &Sample::name;
                                  ^

其余代码工作正常。

谁能告诉我如何声明指向声明为 -char name[35]; 的数据成员的指针?

最佳答案

您需要声明指针如下:

char (Sample::*FName)[35]=  &Sample::name;

一般规则是 U (T::*<var_name>)声明指向类 T 成员的指针与类型 U .在这里,类型是 char <var_name>[35] , 所以上面的语法是必需的。

另请注意,您的 malloc是不正确的。 strlen给出字符串中的字符数,但要表示该字符数,您还需要一个字符作为终止空字符:

City= (char*) malloc(strlen(addr)+1);
strcpy(City,addr);

关于c++ - 通过 "pointers to class members"访问作为数组的类成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23453488/

相关文章:

c++ - 如何衡量 C++ (MFC) 应用程序的性能?

c++ - 我们可以像在 C++ 中一样使用十六进制字节和字符吗?

java - 在 java 中,我们可以通过使用 javap 反汇编程序来探索 java 类和方法。如何在 C++ 中做同样的事情?

c++ - 使用析构函数释放链接对象

c++ - 编译器如何知道指针的类型

c - Printf 未显示并返回值 3221225477

c++ - 为什么我的对象不能访问它自己的私有(private)成员变量? [C++]

c++ - 对象的结构覆盖定义的方法?

java - 将另一个类的对象添加到 JPanel

c++ - 调用派生类的虚方法导致段错误