我写了下面的代码来探索类成员的指针:
#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/