Различные способы конструирования объекта в C ++ - PullRequest
11 голосов
/ 22 февраля 2010

Я хочу построить объект в стеке, используя C ++. Знаете ли вы, в чем разница между этими способами и способами вызова конструктора (с круглыми скобками и без них):

а) MyClass object ;

б) MyClass object() ;

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

Спасибо, ребята, за любую информацию.

Ответы [ 2 ]

21 голосов
/ 22 февраля 2010

Это одна из тех ошибок C ++.

MyClass object();

- это способ определения функции prototype в C ++, поэтому компилятор считает, что вы пытаетесь объявить другую функцию в середине другой функции.

Если вы хотите вызвать конструктор по умолчанию (то есть тот, который не принимает аргументов), используйте вместо этого следующий синтаксис:

MyClass object;

См. Также ответ Гарта Гилмора на теперь удаленный вопрос. Какой ваш (наименее) любимый синтаксис есть у меня?

В С ++

Employee e1("Dave","IT"); //OK
Employee e2("Jane"); //OK
Employee e3(); //ERROR - function prototype

9 голосов
/ 22 февраля 2010

Например:

class MyClass
{
   public:
   MyClass()
   {x = 0;}
   MyClass(int X)
   {x = X;}
   private:
   int x;
};

int main()
{
   MyClass myObject(56); // initialize x to value '56'
   MyClass myObject2; //calls default constructor and initializes x to 0
   return 0;
}
...