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


Автор: knut 30.3.2007, 10:43
Добрый день.
Есть a.h  с глобальной функц. some_func(); и имеется b.cpp
в котором надо вызвать  some_func();
Код

//a.h
static bool some_func();
//a.cpp
bool some_func()
{
  //realize
}
//b.cpp
#include "a.h"
bool  methode()
{
  some_func();
}


но проблема. компилятор ругается.
//error static function bool some_func()  declared but not defined

Автор: Partizan 30.3.2007, 10:47
файл с реализацией функции надо включить в проект, чтобы он тоже прилинковывался при сборке..

Автор: Fazil6 30.3.2007, 10:47
Цитата(knut @  30.3.2007,  10:43 Найти цитируемый пост)
но проблема. компилятор ругается.//error static function bool some_func()  declared but not defined

Что не понятно? Компиллятор не видит реализации твоей some_func(). Не вижу проблемы.

Добавлено через 9 минут и 32 секунды
а, ты в разных еденицах компилляции определяшь и используешь... 
эту функцию  можно только в a.cpp у тебя вызывать, потому что она static

Автор: knut 30.3.2007, 11:00
Partizan,  т.е a.cpp в b.cpp ?

Автор: aldari 30.3.2007, 11:04
Эксперементировать тяжело? Зачем всё время спрашивать? Попробуй, потом пиши.

Автор: knut 30.3.2007, 11:08
Fazil6, 
если я тебя правельно понял то если  у меня есть статическая
глобалная функциия то я не могу его вызвать его из функции
каторая реализованна в другом файле?(т.е не там где статич.функция)

Автор: Fazil6 30.3.2007, 11:20
Цитата(knut @  30.3.2007,  11:08 Найти цитируемый пост)
если я тебя правельно понял то если  у меня есть статическаяглобалная функциия то я не могу его вызвать его из функциикаторая реализованна в другом файле?(т.е не там где статич.функция)

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

Автор: Xenon 30.3.2007, 12:06
В том-то и заключается ее статичность - область видимости ограничена одним модулем (файлом). 

Автор: Earnest 30.3.2007, 19:21
Цитата(knut @  30.3.2007,  12:08 Найти цитируемый пост)
статическая
глобалная функциия 

нонсенс. Либо статическая, либо глобальная.
Грубо говоря, помещая static bool some_func() в h-файл, ты обещаешь, что эта функция будет реализована в каждом файле, куда этот h включается. И это будут разные функции (в смысле адреса).
Т.е. конструкция абсолютно бессмысленная.

Если оставлять вс как есть, просто убери слово static из определения функции, и будет она глобальная.

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