2009-06-29 54 views

回答

8

您还没有提供你试图编译相同的代码。总是复制并粘贴。您的代码中的说明是,您没有语法上正确的类声明或变量声明,并且当您声称仅使用a->i时,错误消息提到“.i”。这里的工作代码:

#include <stdio.h> 
class A { 
    public: 
     int i; 
}; 

int main() { 
    A* a = new A(); 
    int* i = &a->i; 
    printf("a: %p\na->i: %p\n", a, i); 
    return 0; 
} 

最终,你说语法你试过得到成员的地址是正确的。错误消息说您尝试的语法是a.i。这是行不通的,因为错误信息给出了。变量a不是类,结构或联合类型。相反,这是一个指针到这些类型之一。您需要取消引用指针以获取该成员。

当我运行它,我得到这个:

 
$ ./a.out 
a: 40748 
a->i: 40748 

的地址是相同的,因为A是一个简单的类,所以这个输出是可以预期的。第一名成员经常被放在课程记忆的开始。向该类添加第二个成员变量并获取其地址;那么你应该看到不同的值。

0

在C++:

class A { 
    public:   // note colon after public 
     int i; 
};     // note semicolon after bracket 

A *a = new A();  // note *a not a* 

打印:

cout << ios::hex << &a->i << endl; 

对我来说,这似乎工作确定。

0

& a->我应该工作。在你的情况下,因为类只有一个公共整数,a和i的地址都是相同的。

0

你在正确的轨道上,但你提到的编译错误,这听起来像你键入“&a.i

class A 
{ 
    public: 
     int i; 
}; 

... 

A *a = new A(); 
int *i = &a->i; 
0

此代码出现编译?

class A { 
    public: 
     int i; 
}; 
int main() { 
    A *a = new A(); 
    int *x = &a->i; 
    return 0; 
} 
0

我下面的作品使用G ++

class A 
{ 
public: 
    int m_i; 
}; 

int 
main() 
{ 
    A* a = new A(); 
    int* i_ptr = &(a->m_i); 

    return 0; 
} 

我猜你的意思是A* a = ...,而不是A a* = ...

相关问题