Я читаю язык программирования 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
Что сообщение об ошибке? - [_It компилируется в gcc-4.8._] (http://coliru.stacked-crooked.com/a/293f304a2d33f48f) – deepmax
Это может технически работать, но похоже, что вы можете генерировать очень тяжело, чтобы следовать коду таким образом, потому что аргумент по умолчанию больше не является постоянным. – PMF
неразрешенный внешний символ «public: void __thiscall X :: f (int)» (? F @ X @@ QAEXH @ Z), на который ссылается функция «void __cdecl g (класс X &)» (? G @@ YAXAAVX @@@ Z) –