Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
DaskOFF
112 / 112 / 42
Регистрация: 02.05.2012
Сообщений: 524
Записей в блоге: 1
1

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

01.08.2012, 16:55. Просмотров 934. Ответов 8
Метки нет (Все метки)

Quer::add_line_to_vec: недопустимый вызов нестатической функции-члена
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.08.2012, 16:55
Ответы с готовыми решениями:

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

Какой алгоритм должен быть у формулы?
Здравствуйте! Пробую решать задачи по основам программирования и алгоритмизации...

Какой должен быть прототип у оператора копирующего присваивания?
Какой должен быть прототип у оператора копирующего присваивания?

Какой должен быть итератор для константной ссылки на вектор?
Есть вектор, он передается в функцию так: #include <iostream> #include...

В VC++ параметр const (_variant_t & data) непонятно какой должен быть
Здарствуйте господа Я создаю репорт с помощью 'Report Designer Component' ...

8
StasGamilton
Эксперт по пяченькам
67 / 67 / 12
Регистрация: 16.08.2011
Сообщений: 249
01.08.2012, 17:03 2
Ну если он использует переменные конкретного объекта и ассоциируется именно с этим объектом, то нестатический, в противном случае статический (т.е. не относиться к конкретному объекту класса, но относится к классу)
1
DaskOFF
112 / 112 / 42
Регистрация: 02.05.2012
Сообщений: 524
Записей в блоге: 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);
    }       
}
0
StasGamilton
Эксперт по пяченькам
67 / 67 / 12
Регистрация: 16.08.2011
Сообщений: 249
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);
А в данном случае функция у тебя к объекту не привязана.
В данном случае функция у тебя должна быть нестатическая, т.к. добавляет строку текста в конкретный объект класса.
1
DaskOFF
112 / 112 / 42
Регистрация: 02.05.2012
Сообщений: 524
Записей в блоге: 1
01.08.2012, 17:25  [ТС] 5
все понял, спасибо
0
PointsEqual
ниначмуроФ
842 / 526 / 110
Регистрация: 12.10.2009
Сообщений: 1,915
01.08.2012, 17:45 6
Цитата Сообщение от DaskOFF Посмотреть сообщение
можно на коротеньком примере ?
как пример посмотри паттерн Singleton
0
Avazart
Эксперт С++
7759 / 5664 / 555
Регистрация: 10.12.2010
Сообщений: 25,668
Записей в блоге: 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);
0
novi4ok
551 / 504 / 25
Регистрация: 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;              
};
Статические ф-ции работаю со статическими членами класса.
Как вариант передавать статической ф-ции конкретный объект.
не забыть бы еще где-нибудь создать эти статические члены класса, а то линкер заругается
0
Avazart
Эксперт С++
7759 / 5664 / 555
Регистрация: 10.12.2010
Сообщений: 25,668
Записей в блоге: 17
01.08.2012, 18:15 9
не забыть бы еще где-нибудь создать эти статические члены класса, а то линкер заругается
Само собой...
0
01.08.2012, 18:15
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.08.2012, 18:15

В VC++ параметр const (_variant_t & data) непонятно какой должен быть
Господа помогите кто чем может :-) ITablePtr pTable есть ф-я...

Какой должен быть синтаксис для использования вложенного шаблонного класса?
Никак не могу найти, как это правильно написать? template &lt;class T&gt; class List...

Как правильно должен быть написан метод возвращающий ссылку на вектор
Доброе время форумчане! Ну собственно сама тема говорит Есть класс ...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru