Конструкторы с параметрами по умолчанию в заголовочных файлах - PullRequest
27 голосов
/ 17 сентября 2009

У меня есть файл cpp как это:

#include Foo.h;
Foo::Foo(int a, int b=0)
{
    this->x = a;
    this->y = b;
}

Как мне сослаться на это в Foo.h?

Ответы [ 4 ]

57 голосов
/ 17 сентября 2009

.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) { }

Вы добавляете по умолчанию только декларации, а не реализации.

9 голосов
/ 17 сентября 2009

Файл заголовка должен иметь параметры по умолчанию, а 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;
}
8 голосов
/ 17 сентября 2009

Параметр по умолчанию должен быть записан в заголовочном файле.

Foo(int a, int b = 0);

В cpp при определении метода нельзя указывать параметр по умолчанию. Тем не менее, я оставляю значение по умолчанию в закомментированном коде, чтобы его было легко запомнить.

Foo::Foo(int a, int b /* = 0 */)
5 голосов
/ 17 сентября 2009

Вам необходимо поместить аргументы по умолчанию в заголовок, а не в файл .cpp.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...