-6

为什么这段代码不起作用:

int main () {

Bob bob;
bob.giveANewFredSomeData();
Fred::sharedFred.getANumber(); //Crashes here due to someData inside fred being NULL

return 0;
}

Class Data {
    int aNumber;
}

Class Bob {
   void giveANewFredSomeData{
     Data data;

     Fred::sharedFred = new Fred(data);

   }
}

Class Fred {
  Data someData;

  static sharedFred;

  Fred (Data data) {
    someData = data;
  }

  int getANumber(){
   return someData.aNumber 
 }
}
4

1 回答 1

2

您的代码不起作用,因为:

  • 类声明后需要一个分号
  • static不是有效类型
  • static对象必须在类中的定义之外进行初始化,以便在代码的其他地方使用。你需要类似的东西:Fred Fred::sharedFred;在main之前
  • 函数的声明必须()在函数名前面有{}大括号
  • 这些类必须在main功能范围内才能使用它们,并且还必须在彼此的范围内,具体取决于调用什么。即 main 必须在类之后声明,并且对于调用另一个类的每个类都相同
  • 默认情况下,类中声明的属性/方法是私有的。要使一组属性/方法公开,请public在组顶部使用关键字后跟冒号
于 2013-10-02T22:04:13.123 回答