Вызов класса внутри класса - PullRequest
0 голосов
/ 18 мая 2009

Я пытаюсь написать класс, который, когда его спросят, вызовет класс и превратит его в члена класса. Вот быстрый пример того, что я имею в виду:

class foo{
  myClass Class;
  foo(); 
};
foo::foo()
{
  //Create the class and set it as the foo::Class variable
}

Я уверен, что это действительно легко сделать. Любая помощь будет оценена Спасибо

Редактировать: Извините за плохую терминологию. Я постараюсь изложить то, что я хочу сделать более кратко. Я создаю класс ( foo ), который имеет переменную ( Class ) с определением класса ( myClass ). Мне нужно создать myClass объект и присвоить его Class , с-в классе foo . Благодаря помощи каждого я как бы достиг этого.

Моя проблема сейчас в том, что созданный мной объект дает мне «Необработанное исключение» ... «Место чтения нарушения доступа 0x000000c0» в Класс , в первой строке myClass Я пытаюсь выполнить функцию. Спасибо за вашу помощь!

примечание: В настоящее время я использую решение emg-2.

Ответы [ 3 ]

4 голосов
/ 18 мая 2009

Нет необходимости делать что-либо. Предполагая, что myClass имеет конструктор по умолчанию, он будет использоваться для создания экземпляра класса (вы могли бы использовать более подходящие имена здесь, вы знаете). Если вам нужно передать параметры конструктору, используйте список инициализации:

foo :: foo() : Class( "data" ) {
}
1 голос
/ 18 мая 2009

Я не уверен, что правильно понял вопрос. Но если вы пытаетесь создать объект по требованию, вы можете сделать что-то вроде этого:

class foo{
  myClass* m_pClass;
  foo();
  myClass* f();
  ~foo();
};

foo::foo() : m_pClass(NULL) //Initialize the pointer to NULL do not create any object in the constructor
{
}

foo::~foo()
{
  //Release the allocated object
  delete m_pClass;
  m_pClass = NULL;
}

myClass* foo::f()
{
  //Create a new object and return
  m_pClass = new myClass;
  return m_pClass;
}
1 голос
/ 18 мая 2009

Если вы хотите только составить, используйте раствор Нила. Если вы хотите агрегировать (то есть вы будете назначать внешние объекты в myClass * Class), вы должны использовать указатель:

class foo{
  myClass * Class;
  void createClass(); 
};
// can't use name foo, because its a name reserved for a constructor
void foo::createClass() {
  Class = new myClass();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...