2009-09-17 15 views

Odpowiedz

53

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

Wystarczy tylko dodać domyślne deklaracji, a nie implementacji.

+0

Dzięki, doceń szybką odpowiedź! – royvandewater

8

Plik nagłówkowy powinien mieć domyślne parametry, a cpp nie.

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; 
} 
5

Musisz umieścić domyślny argumentu s w nagłówku, a nie w pliku .cpp.

8

Domyślny parametr należy zapisać w pliku nagłówkowym.

Foo(int a, int b = 0); 

Na stronie cpp podczas definiowania metody nie można podać domyślnego parametru. Jednak zachowuję domyślną wartość w skomentowanym kodzie, ponieważ jest łatwa do zapamiętania.

Foo::Foo(int a, int b /* = 0 */) 
+2

i zmienić go w dwóch miejscach, w razie potrzeby? ;-) –

+1

99% razy, to się nie zmieni. Więc mówisz o rzadkim przypadku użycia :-) – Naveen

+1

Moim zdaniem jest to źle, standard C++ nie * wymaga *, aby był w obu miejscach i sprawdzić, czy jest taki sam. Wartości domyślne dla parametrów są w takim samym stopniu częścią interfejsu jak typy parametrów. Kompilator powinien to sprawdzić. –

Powiązane problemy