C++成员变量指针

C++成员变量指针,c++,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 }

我确信这是一个基本问题,但当我认为我做得正确时,我不断收到内存访问错误

我想做的是:

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
}

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

如果要将std::string传递给printf,则需要传递一个c字符串

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

除了Andreas的回答,你没有在B中初始化*a。仅仅因为它们的名字相同并不意味着它们指向同一个东西。你需要说些类似的话

b.a = new A();
在你的主要方面。否则,b.a是一个空指针

例如,您需要在b实例上创建a的实例。或者,为了更接近当前代码,您可以执行以下操作:

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

  B b;
  B.a = a;
  return 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());
   .....
};

我不理解最后一部分-我不认为它会按原样编译,我也不完全确定你的意思。这和B中的A*A完全一样吗?main需要一个返回类型。你不能忽略它。它必须是int。它和其他函数一样需要一个参数列表。类定义必须以;结尾;。类别定义不得包含程序代码。printf不接受std::strings。整理打字错误,展示你实际使用的测试用例,然后我们再讨论@詹姆士:我同意,但这是不可接受的!OP对一段具体的代码有一个具体的问题,他决定给我们一些没有意义的东西。不是说不友善,只是它太超出了伪代码的标准,我不明白到底发生了什么。许多事情中的任何一个:缺少初始化,printf的参数不正确,甚至对someFunct的调用都可能导致内存访问错误,但是如果没有更正确的东西,我真的看不到任何方法来判断;也许@johnycplusplus可以更新这个问题,更详细地说明他的程序实际上在做什么。@jamesj我们当然不是不愿意帮助,但如果没有足够的信息,我们就无法真正帮助。如果OP能为我们提供更好的代码片段,他总是可以在这里更新,或者在准备好后打开一篇新文章。只是还有很多其他的问题需要回答,而这在我看来,目前还没有达到可以理解为一个完整问题的程度。啊,是的,这是一个狡猾的问题。@jamesj在原始资料作者中没有直接使用B类,那么B中的*a怎么可能指向任何东西呢。我同意你关于默认为private的评论,但我没有听到。@Tomalak-true。这是我的一个输入错误。@jamesj:我建议在你的回答中也修改一下:@Tomalak Geret'kal-我只是坚持原始示例中使用的伪代码样式。如果这是真实的代码,那么是的,它会,以及一个适当的签名等。如果这是伪代码,那么谁能说原始代码是错误的?或者B.a=a是有效的