Конструкторы с параметрами по умолчанию в файлах заголовков
У меня есть файл cpp следующим образом:
#include Foo.h;
Foo::Foo(int a, int b=0)
{
this->x = a;
this->y = b;
}
Как я могу ссылаться на это в Foo.h?
Ответ 1
.h:
class Foo {
int x, y;
Foo(int a, int b=0);
};
.cc:
#include "foo.h"
Foo::Foo(int a,int b)
: x(a), y(b) { }
Вы добавляете значения по умолчанию к объявлению, а не к реализации.
Ответ 2
Файл заголовка должен иметь параметры по умолчанию, cpp не должен.
test.h:
class Test
{
public:
Test(int a, int b = 0);
int m_a, m_b;
}
test.cpp:
Test::Test(int a, int b)
: m_a(a), m_b(b)
{
}
main.cpp:
#include "test.h"
int main(int argc, char**argv)
{
Test t1(3, 0);
Test t2(3);
//....t1 and t2 are the same....
return 0;
}
Ответ 3
Параметр по умолчанию должен быть записан в файл заголовка.
Foo(int a, int b = 0);
В cpp, определяя метод, вы не можете указать параметр по умолчанию. Тем не менее, я сохраняю значение по умолчанию в комментированном коде, так что его легко запомнить.
Foo::Foo(int a, int b /* = 0 */)
Ответ 4
Вам нужно поместить аргументы по умолчанию в заголовок, а не в файл .cpp.