McAffey Temat założony przez niniejszego użytkownika |
Struktura jako argument domniemany funkcji » 2013-04-13 06:04:06 Witam. Skoro nigdzie nie znalazłem takiego wykorzystania, to pewnie odpowiedź jest przecząca, ale co mi szkodzi upewnić się Was, starych wyjadaczy - czy da się zastosować strukturę jako argument domniemany funkcji ? Kompilator w przypadku argumentu funkcji, nie godzi się na stosowanie standardowego przypisania wstępnej wartości strukturze (x = {1, 2}), a nie przychodzi mi do głowy inny sposób na wykonanie inizjalizacji struktury. Wydaje mi się, że nie da się tego wykonać, ale już nie raz używałem takiego zwrotu "wydaje mi się", a potem wielokrotnie pokazywaliście mi, że "tylko mi się wydaje", i po prostu brak mi doświadczenia, dlatego pytam ;) Z góry dzięki :) |
|
pekfos |
» 2013-04-13 11:03:25 Masz na myśli wartość domyślną argumentu? #include <iostream>
struct a { int x, y; };
void f( a b = { 1, 2 } ) { std::cout << b.x << " " << b.y; }
int main() { f(); } Kompiluje się i działa (GCC 4.7.2). |
|
McAffey Temat założony przez niniejszego użytkownika |
» 2013-04-13 11:45:38 Hmm, to może dzięki temu że masz nowszy, ja sprawdzałem na GCC 4.4.1 i GCC 4.6.2 i na obu dostawałem błąd kompilacji : error: expected primary-expression before '{' token error: expected ')' before '{' token No nic, chyba zostaje mi zaktualizować kompilator :) |
|
DejaVu |
» 2013-04-13 12:39:57 Jeżeli masz włączoną obsługę standardu C++11 to być może zadziała wspomniany zapis.
/edit: Pod Visual C++ 1012 nie działa, więc jest to raczej rozszerzenie kompilatora GCC 4.7.2. |
|
Elaine |
» 2013-04-13 15:21:15 To nie jest rozszerzenie, to wina kompilatora Microsoftu, który ma tylko częściową obsługę C++. Według standardu jest to poprawne; GCC (które od 4.8.1 ma pełną obsługę) i Clang (któremu niewiele brakuje) nie mają z tym problemu. |
|
Monika90 |
» 2013-04-13 16:20:24 Można problem rozwiązać na wiele sposobów: 1. Zdefiniować konstruktor struct S { int x, y, z; S( int x, int y, int z ) : x( x ) , y( y ) , z( z ) { } };
void f( S s = S( 1, 2, 3 ) );
2. Zdefiniować stałą struct S { int x, y, z; };
const S default_s = { 1, 2, 3 };
void f( S s = default_s );
3. Przeciążyć funkcję struct S { int x, y, z; };
void f( S s ); inline void f() { S s = { 1, 2, 3 }; f( s ); }
|
|
« 1 » |