Форум программистов, компьютерный форум CyberForum.ru

Как определять какой метод должен быть статическим, а какой нет? - C++

Восстановить пароль Регистрация
 
DaskOFF
 Аватар для DaskOFF
112 / 112 / 9
Регистрация: 02.05.2012
Сообщений: 521
Записей в блоге: 1
01.08.2012, 16:55     Как определять какой метод должен быть статическим, а какой нет? #1
Quer::add_line_to_vec: недопустимый вызов нестатической функции-члена
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
StasGamilton
Эксперт по пяченькам
 Аватар для StasGamilton
67 / 67 / 1
Регистрация: 16.08.2011
Сообщений: 258
01.08.2012, 17:03     Как определять какой метод должен быть статическим, а какой нет? #2
Ну если он использует переменные конкретного объекта и ассоциируется именно с этим объектом, то нестатический, в противном случае статический (т.е. не относиться к конкретному объекту класса, но относится к классу)
DaskOFF
 Аватар для DaskOFF
112 / 112 / 9
Регистрация: 02.05.2012
Сообщений: 521
Записей в блоге: 1
01.08.2012, 17:06  [ТС]     Как определять какой метод должен быть статическим, а какой нет? #3
можно на коротеньком примере ?

вот мой класс
C++
1
2
3
4
5
6
7
8
9
10
11
12
class Quer {
public:
    typedef std::vector<std::string>::size_type siz_vec;     // тип хранящий размер вектора
 
    // МЕТОДЫ
    void add_line_to_vec(std::ifstream&);
    
 
private:
    std::map<std::string, std::set<int> > word_map;     // карта хранящая слово(ключ) и номера строк в которых оно встречается(набор)
    std::vector<std::string> line_text;                 // вектор хранящий каждую строку текста
};

вот программа
C++
1
2
3
4
5
6
7
8
9
10
11
12
int main() 
{
    std::string file_name_str;
    std::ifstream file_f;
    std::cout << "Enter file name and its type(name.type)" << std::endl
            << " -> ";
    std::cin >> file_name_str;
    open_file(file_f, file_name_str);
    Quer::add_line_to_vec(file_f);
 
    return 0;
}

определение функций
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
void open_file(std::ifstream& f, std::string ss)
{ 
    if (std::ifstream(ss.c_str()) == NULL) {
        system("cls");
        std::cout << "Error file not found!" << std::endl
            << "Enter file name and its type(name.type)" << std::endl
            << " -> ";
        std::string if_error;
        std::cin >> if_error;
        open_file(f, if_error);
    } else {
        f.open(ss.c_str());
        std::cout << "Excellent! The file is opened" << std::endl;
    }
}
 
//Заполняем вектор строками из открытого файла
void Quer::add_line_to_vec (std::ifstream& f) 
{
    std::string line;
    while (std::getline(f, line)) {
        line_text.push_back(line);
    }       
}
StasGamilton
Эксперт по пяченькам
 Аватар для StasGamilton
67 / 67 / 1
Регистрация: 16.08.2011
Сообщений: 258
01.08.2012, 17:22     Как определять какой метод должен быть статическим, а какой нет? #4
Насчет примера пока что ничего придумать путного не могу.
Но по коду можно сказать следующее:
C++
1
Quer::add_line_to_vec(file_f);
Нестатическая функция относиться к конкретному объекту, поэтому вызывается у этого объекта
т.е.
C++
1
2
Quer a;
a.add_line_to_vec(file_f);
или
C++
1
2
Quer a;
a->add_line_to_vec(file_f);
А в данном случае функция у тебя к объекту не привязана.
В данном случае функция у тебя должна быть нестатическая, т.к. добавляет строку текста в конкретный объект класса.
DaskOFF
 Аватар для DaskOFF
112 / 112 / 9
Регистрация: 02.05.2012
Сообщений: 521
Записей в блоге: 1
01.08.2012, 17:25  [ТС]     Как определять какой метод должен быть статическим, а какой нет? #5
все понял, спасибо
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
832 / 516 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
01.08.2012, 17:45     Как определять какой метод должен быть статическим, а какой нет? #6
Цитата Сообщение от DaskOFF Посмотреть сообщение
можно на коротеньком примере ?
как пример посмотри паттерн Singleton
Avazart
 Аватар для Avazart
6897 / 5137 / 252
Регистрация: 10.12.2010
Сообщений: 22,578
Записей в блоге: 17
01.08.2012, 18:11     Как определять какой метод должен быть статическим, а какой нет? #7
C++
1
2
3
4
5
6
7
8
9
10
class Quer {
public:
    typedef std::vector<std::string>::size_type siz_vec;  
 
    static void add_line_to_vec(std::ifstream&);
    
private:
    static std::map<std::string, std::set<int> > word_map;   
    static std::vector<std::string> line_text;              
};
Статические ф-ции работаю со статическими членами класса.

Как вариант передавать статической ф-ции конкретный объект:
C++
1
2
Quer Obj;
Quer::add_line_to_vec(file_f,Obj);
novi4ok
549 / 502 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
01.08.2012, 18:14     Как определять какой метод должен быть статическим, а какой нет? #8
Цитата Сообщение от Avazart Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
class Quer {
public:
    typedef std::vector<std::string>::size_type siz_vec;  
 
    static void add_line_to_vec(std::ifstream&);
    
private:
    static std::map<std::string, std::set<int> > word_map;   
    static std::vector<std::string> line_text;              
};
Статические ф-ции работаю со статическими членами класса.
Как вариант передавать статической ф-ции конкретный объект.
не забыть бы еще где-нибудь создать эти статические члены класса, а то линкер заругается
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.08.2012, 18:15     Как определять какой метод должен быть статическим, а какой нет?
Еще ссылки по теме:

Создать программу, которая будет определять с какой буквы вы ввели слово с А, с Б или с В и выводить об этом сообщение C++
C++ Какой должен быть итератор для константной ссылки на вектор?
C++ Какой должен быть прототип у оператора копирующего присваивания?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Avazart
 Аватар для Avazart
6897 / 5137 / 252
Регистрация: 10.12.2010
Сообщений: 22,578
Записей в блоге: 17
01.08.2012, 18:15     Как определять какой метод должен быть статическим, а какой нет? #9
не забыть бы еще где-нибудь создать эти статические члены класса, а то линкер заругается
Само собой...
Yandex
Объявления
01.08.2012, 18:15     Как определять какой метод должен быть статическим, а какой нет?
Ответ Создать тему
Опции темы

Текущее время: 04:40. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru