В чем различия между Test t; и проверить т ();? если тест является классом

Возможный дубликат:
Почему нет звонка конструктору?

Я использую Visual Studio 2012, предположим, что тест является классом

class Test
{
};

Когда я создаю новый экземпляр Test, чем отличаются следующие два способа?

путь 1

Test t;

путь 2

Test t();

Я получил этот вопрос в коде ниже, изначально я определил экземпляр A способом 2, я получил только одну ошибку, потому что B не предоставляет конструктор по умолчанию, но когда я определяю его способом 1, я получил дополнительную ошибку.

class B
{
B(int i){}
};

class A
{
A(){}
B b;
};

int main(void)
{
A a(); // define object a in way 2

getchar() ;
return 0 ;
}

если я определю в пути 1

A a;

Я получил еще одну ошибку сказал

ошибка C2248: «A :: A»: невозможно получить доступ к закрытому члену, объявленному в классе
‘A’

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

7

Решение

введите описание изображения здесь

Test t; определяет переменную с именем t типа Test,

Test t(); объявляет функцию с именем t который не принимает параметров и возвращает Test,

50

Другие решения

В чем разница между двумя декларациями?

A a();

Объявляет функцию, а не объект. Это один из Самый неприятный разбор в C ++.
Объявляет функцию по имени a который не принимает параметров и возвращает тип A,

A a;

Создает объект с именем a типа A вызывая его конструктор по умолчанию.

Почему вы получаете ошибку компиляции?

Для класса по умолчанию указатель доступа private так что вы получите ошибку, потому что ваш конструктор класса private и он не может быть вызван при создании объекта с вышеуказанным синтаксисом.

17

По вопросам рекламы [email protected]