Вызов функций-членов в Main C ++ - PullRequest
9 голосов
/ 25 марта 2009
#include <iostream>

using namespace std;

class MyClass
{
public:
       void printInformation();
};

void MyClass::printInformation()
{
     return;
}

int main()
{

    MyClass::printInformation();

    fgetc( stdin );
    return(0);
}

Как бы я вызвал функцию printInformation в main? Ошибка говорит мне, что для этого мне нужно использовать объект класса.

Ответы [ 7 ]

28 голосов
/ 25 марта 2009

Объявите экземпляр MyClass, а затем вызовите функцию-член для этого экземпляра:

MyClass m;

m.printInformation();
17 голосов
/ 25 марта 2009

Если вы хотите, чтобы ваш код работал, как указано выше, функция printInformation () должна быть объявлена ​​и реализована как статическая функция.

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

13 голосов
/ 25 марта 2009

Из вашего вопроса неясно, хотите ли вы иметь возможность использовать класс без идентификатора или если вызов метода требует от вас создания экземпляра класса. Это зависит от того, хотите ли вы, чтобы элемент printInformation записывал некоторую общую информацию или более конкретную информацию об идентичности объекта.

Случай 1 : вы хотите использовать класс без создания экземпляра . Членами этого класса должны быть static , используя это ключевое слово, вы сообщаете компилятору, что вы хотите иметь возможность вызывать метод без необходимости создания нового экземпляра класса.

class MyClass
{
public:
    static void printInformation();
};

Случай 2 : вы хотите, чтобы у класса был экземпляр , вам сначала нужно создать объект , чтобы у класса была идентичность, как только сделано, вы можете использовать объект его методы.

Myclass m;
m.printInformation();

// Or, in the case that you want to use pointers:
Myclass * m = new Myclass();
m->printInformation();

Если вы не знаете, когда использовать указатели, прочитайте сводку Pukku в этом вопросе переполнения стека .
Обратите внимание, что в текущем случае вам не понадобится указатель. : -)

3 голосов
/ 25 марта 2009

Вам необходимо создать объект, так как printInformation() не является статичным. Попробуйте:

int main() {

MyClass o;
o.printInformation();

fgetc( stdin );
return(0);

}
2 голосов
/ 25 марта 2009

объявляем это "статичным" следующим образом:

static void MyClass::printInformation() { return; }
0 голосов
/ 16 февраля 2012

В неформальной заметке вы также можете вызывать нестатические функции-члены для временных:

MyClass().printInformation();

(на другом неофициальном примечании конец времени жизни временной переменной ( переменная важен, потому что вы также можете вызывать неконстантные функции-члены) наступает в конце полного выражения (" ; "))

0 голосов
/ 16 декабря 2011

вам нужно создать экземпляр класса для вызова метода ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...