С++ вызывает статическую функцию из другой статической функции

иметь статическую функцию в заголовочном файле

    class Diagnostics {
    public:


    static void functionA(){
    }

    static void functionB(){
    some code //works fine until enters the loop below
    variable_name // works fine here.
    if (condition){ // 
    variable_name; // after condition is met , i step in here, debugger cannot examine
                   // the vairable_name which was fine above. right after i try to step                      over , i get SIGSEV error
    some_code; // doesnt even come here. Process exited with SIGSEV
    function C(); // tried using classname::functionC , didnt work either

        }
    }

static void functionC(){
}

person cyrux    schedule 03.11.2010    source источник
comment
Какой вопрос? Я бы не ожидал, что variable_name будет найден — он нигде не упоминается в определении класса или в предшествующем коде. И я не понимаю, как процесс может завершиться с SIGSEGV, если он не компилируется, чего не будет, если variable_name не найден.   -  person Steve Jessop    schedule 03.11.2010
comment
Что такое variable_name? Что такое some_code? Где они определены? Также вам не хватает возвращаемых типов в ваших функциях.   -  person casablanca    schedule 03.11.2010
comment
Пожалуйста, покажите нам точный код.   -  person Prasoon Saurav    schedule 03.11.2010
comment
Является ли имя переменной нестатическим членом класса? если да, то это твоя проблема.   -  person GWW    schedule 03.11.2010
comment
Ну, я тоже не могу найти variable_name...   -  person Mike DeSimone    schedule 03.11.2010
comment
Этот код не будет компилироваться. Стандартный C++ требует, чтобы функции возвращали объявления типа. Хотя C89 и, возможно, некоторые старые компиляторы C++ используют int в качестве возвращаемого типа по умолчанию.   -  person Alex Jasmin    schedule 03.11.2010
comment
Кроме того, ваше определение functionC находится вне класса, что делает его функцией, не являющейся членом.   -  person Steve Jessop    schedule 03.11.2010
comment
functioC не вне класса. почистил код. недействительные возвращаемые типы   -  person cyrux    schedule 03.11.2010


Ответы (2)


static внутри class означает, что рассматриваемый член или метод не работает с объектом, то есть он не определяет this, но все еще находится в пространстве имен класса.

static вне класса означает то же, что и в C: переменная или функция не имеет внешней связи, т. е. вещи, находящиеся за пределами текущей единицы компиляции, не могут ссылаться на нее.

Две совершенно разные вещи.

person Mike DeSimone    schedule 03.11.2010
comment
Возможно, вы были сбиты с толку, потому что у OP был неправильный отступ кода. Я исправил это, теперь вы должны понять, почему этот ответ не работает. (А именно functionC является членом класса) - person Billy ONeal; 03.11.2010

не знаю проблема была. Теперь работает нормально. первоначально произошло во время отладки. Затем я просто выполнил вместо отладки, работал нормально. затем я снова попытался отладить, и на этот раз все сработало.

person cyrux    schedule 03.11.2010