Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Конструктор без параметров


Автор: Mr_Nuke 12.5.2011, 16:18
Код

class eq{
    public: 
        eq();
        void Add(int);    
};

eq::eq(){
    cout << "constructor";
}

void eq::Add(int x){
    cout << "Adding";
}

int _tmain(int argc, _TCHAR* argv[])
{
    eq A();
    A.Add(1);    
}


Выдает ошибку: left of '.Add' must have class/struct/union

Добавляем в конструктор параметры: 

Код

class eq{
    public: 
        eq(int);
        void Add(int);    
};

eq::eq(int x){
    cout << "constructor";
}

void eq::Add(int x){
    cout << "Adding";
}

int _tmain(int argc, _TCHAR* argv[])
{
    eq A(0);
    A.Add(1);    
    return 0;
}


И отлично компилится! Что я делаю не так? Как поступить, когда в конструктор не нужно ничего передавать!

Автор: kemiisto 12.5.2011, 16:22
Конструктор без параметров вызывается без (). Добро пожаловать в удивительный мир Це++! smile

Добавлено через 50 секунд
В 17 строке тобишь 
Код

eq A;

Автор: Artemon 12.5.2011, 16:26
Цитата(Mr_Nuke @  12.5.2011,  16:18 Найти цитируемый пост)
eq A();


Если лексема может быть интерпретирована как объявление функции, то она так и будет интерпретироваться.

В данном случае компилятор так и посчитал

Автор: borisbn 12.5.2011, 16:41
Не в противовес, а, скорее, в дополнение к сказанному:
Код
eq A();

этим кодом ты сказал: где-то (возможно в этом cpp-шнике, возможно в другом) есть функция с именем A без входных параметров и с возвращаемым значением типа eq.
Ты даже можешь её вызвать:
Код

eq x = A();

и это даже откомпилируется, но при линковке будет выдана ошибка - не найдено определение ф-ции eq A();

Автор: Mr_Nuke 12.5.2011, 16:47
Спасибо огромное! Очень понятно объяснили! Проблема решена smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)