2013-10-02 3 views
-6

Почему этот код не работает:Pass объекта к классу с помощью Конструктора

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

Будь ангелом и Вак код в пост ... – Bathsheba

+1

Как насчет ** Код ** ? –

+1

Пожалуйста, покажите в псевдокоде или фактическом коде, что вы хотите сделать. (Возможно, вам придется использовать ручное управление памятью с помощью новых/удаленных и пропущенных указателей.) – Appleshell

ответ

2

Ваш код не работает, потому что:

  • Вам нужна точка с запятой после объявления класса
  • static не является допустимым типом
  • static объекты должны быть инициализированы вне их определения в классе, чтобы использоваться в другом месте кода. Вам нужно что-то вроде: Fred Fred::sharedFred; перед главной
  • декларации функции должны быть () перед именем функции перед {} скобками
  • классы должны быть в рамках main функции для их использования, а также в зависимости друг от друга, в зависимости от того, что называет. т. е. основной должен быть объявлен после класса и того же для каждого класса, который вызывает другой
  • Свойства/методы, объявленные в class, являются частными по умолчанию. Для того, чтобы группа свойств/методов общественных, имеют ключевое слово public с двоеточием в верхней части группы
+0

+1 просто за то, что у вас есть терпение, чтобы написать фактический ответ, когда опубликованный код явно не близок к его фактическому коду. –

Смежные вопросы