簡體   English   中英

通過“指向類成員的指針”訪問作為數組的類成員

[英]Accessing class members that are arrays through “pointers to class members”

我已經編寫了以下代碼來探索指向類成員的指針:

#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 name[35];

您需要按以下方式聲明指針:

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

一般規則是U (T::*<var_name>)聲明指向類型為U的類T的成員的指針。 在這里,類型為char <var_name>[35] ,因此需要以上語法。

另請注意,您的malloc不正確。 strlen給出了字符串中的字符數,但要表示該數字,您還需要一個字符來結束空字符:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM