Аргументы по умолчанию, определяющие статический член

0

я m чтение C++ Язык программирования 4e. В части аргумента по умолчанию я не понимаю ниже кода. Я пытаюсь скомпилировать, но есть ошибка. Во всяком случае, что Бьярн пытается объяснить?
По умолчанию аргумент type проверяется во время объявления функции и оценивается во время вызова. Например:

class X 
{
    public:
    static int def_arg;
    void f(int = def_arg);
// ...
};
int X::def_arg = 7;
void g(X& a)
{
    a.f(); // maybe f(7)
    a.def_arg = 9;
    a.f(); // f(9)
}

Ошибка:

unresolved external symbol "public: void __thiscall X::f(int)" (?f@X@@QAEXH@Z) referenced in function "void __cdecl g(class X &)" (?g@@YAXAAVX@@@Z)

MS C++ 2013

  • 1
    Что за сообщение об ошибке? - Он компилируется в gcc-4.8.
  • 0
    Технически это может сработать, но похоже, что таким образом можно очень трудно генерировать код, поскольку аргумент по умолчанию больше не является константой.
Показать ещё 1 комментарий
Теги:
c++11

1 ответ

1
Лучший ответ

Вы только что объявили f но вам нужно определить тело f:

void f(int = def_arg);

Например

void X::f(int)
{
   // Do something
}

или

class X 
{
    // ...
    void f(int = def_arg)
    { 
        // Do something
    }
};

Живой код.

  • 0
    спасибо, сэр, только один вопрос, который я хочу использовать? В настоящее время я использую vs c ++ 2013.
  • 0
    У вас есть много вариантов, я лично использую NetBeans в качестве IDE и MinGW / GCC в качестве компилятора C ++. Также вы можете использовать Qt, у которого есть MinGW - для тестирования фрагментов кода я использую NotePad ++ и makefile .

Ещё вопросы

Сообщество Overcoder
Наверх
Меню