2013-10-26 3 views
0

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

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)" ([email protected]@@[email protected]) referenced in function "void __cdecl g(class X &)" ([email protected]@[email protected]@@Z) 

MS C++ 2013

+1

Что сообщение об ошибке? - [_It компилируется в gcc-4.8._] (http://coliru.stacked-crooked.com/a/293f304a2d33f48f) – deepmax

+0

Это может технически работать, но похоже, что вы можете генерировать очень тяжело, чтобы следовать коду таким образом, потому что аргумент по умолчанию больше не является постоянным. – PMF

+0

неразрешенный внешний символ «public: void __thiscall X :: f (int)» (? F @ X @@ QAEXH @ Z), на который ссылается функция «void __cdecl g (класс X &)» (? G @@ YAXAAVX @@@ Z) –

ответ

1

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

void f(int = def_arg); 

Например

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

или

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

Live code.

+0

спасибо, сэр, только один вопрос, который вы хотите, чтобы я использовал? в настоящее время im использует vs C++ 2013. –

+0

У вас есть много вариантов, я лично использую [NetBeans как IDE] (https://netbeans.org/) и [MinGW/GCC] (http://www.mingw.org/) как C++. Также вы можете использовать [Qt] (http://qt-project.org/), у которого есть MinGW рядом. Для тестирования фрагментов кода я использую [NotePad ++] (http://notepad-plus-plus.org/) и [Makefile] (http://mrbook.org/tutorials/make/). – deepmax

Смежные вопросы