2011-08-16 153 views
-1

我相信这是一个基本问题,但是当我认为我正确地做到这一点时,我不断收到内存访问错误。C++成员变量指针

我想要做什么:

class A{ 
    string name; 
    string date; 
} 

main{ 
    A *a = new A(); 
    a->name= someFunct(); 
    a->date= someFunct(); 

    B b; 
} 
class B{ 
    A *a; 
    printf("%s", a->name); //retrieving data set in main 
} 

我基本上需要在一个类中分配一些整体设置,并希望能够在整个应用程序访问的最有效的方式这些设置。

+0

凡B中使用,它是如何初始化? – murrekatt

+1

我没有遵循最后的部分 - 我不认为这将编译为现在,我不完全确定你的意思。 B中的A * a是否完全相同? – Rup

+0

@Rup所以我想要做的是在main中创建一个对象,并将数据分配给成员变量。从主创建的任何其他对象我希望能够访问该数据。很显然,我做错了什么,我不知道是什么? – JonnyCplusplus

回答

0

除了Andreas的答案,你是不是初始化*一个在B.只是因为它们被命名为相同并不意味着它们都指向同一件事。你需要说一些像

b.a = new A(); 

在你的主。否则b.a是一个空指针。

即,您需要在您的b实例上创建一个实例。或者让一位接近当前的代码,你可以这样做:

int main(char* args[]){ 
    A *a = new A(); 
    a->name= someFunct(); 
    a->date= someFunct(); 

    B b; 
    B.a = a; 
    return 0; 
} 
+0

'main'需要返回类型。 –

+0

@Tomalak Geret'kal - 我只是坚持原始示例中使用的伪代码风格。如果这是真实的代码,那么它会,以及一个正确的签名等 –

+0

如果这是伪代码,那么谁说,原代码是错的?或者说'B.a = a'是有效的? :) –

3

您正在将std :: string传递给printf,您需要传递一个c字符串。

printf("%s", a->name.c_str()) 
+0

啊,是的,这是一个鬼鬼祟祟的问题。 – murrekatt

0

也许这将是太有用:

class A 
{ 
public: //you forgot this 
     //defaut is private 
    string name; 
    string date; 
}; 

int main() 
{ 
    A *a = new A(); 
    a->name = someFunct(); 
    a->date = someFunct(); 

    delete a; //maybe you should do it 
} 

class B 
{ 
    A *a; 

    ..... 
    printf("%s", a->name.c_str()); 
    ..... 
}; 
+1

B类中的指针a没有在这里初始化 –

+0

@jamesj原创来源作者根本不使用B类 –

+0

确切地说,B怎么能指向任何东西。我同意你的评论关于违约私人,但错过了。 –