funkcja w klasie

0

Dlaczego 2 program nie wyrzuca błędu kiedy 1 to robi?

#include <iostream>
using namespace std;

void f1(){
	f2();
	cout<<"1"<<endl;

}

void f2(){
	cout<<"2"<<endl;
}


int main(){


    return 0;
}

///////////////////////////////

#include <iostream>
using namespace std;

class Test
{
private:
    int f1( int a, int b )
    {   
        f2(5,5);
        return( a - b + 2 );
    }
public:
    int f2( int a, int b )
    {
        return(( a + b ) * 2 );
    }
};



int main(){


    return 0;
}
}
0

mógł byś podać komunikat błędu :)

#edit
z tego co widze to w 1 uzywasz f2() zanim go stworzysz

1
plx211 napisał(a):

mógł byś podać komunikat błędu :)

#edit
z tego co widze to w 1 uzywasz f2() zanim go stworzysz

od początku jestem świadomy tego błędu, ale pytanie dlaczego w przypadku klas ten błąd nie występuje tak jak zostało to zresztą opisane tutaj: http://cpp0x.pl/kursy/Kurs-C++/Funkcje-w-klasie-czyli-metody/312

0

@kq: tak łopatologicznie... dlaczego nie wyrzuca błędu przy klasach, w jaki sposób widzi metodę której deklaracji jeszcze w programie nie było?

3

W skrócie: bo tak to jest zdefiniowane w standardzie. Cała klasa jest parsowana "na raz" (pomijając two-phase lookup) (i np. typedefy wewnątrz klasy), nie jestem pewien jakie są powody dlaczego tak się nie dzieje w przypadku zwykłych funkcji, ale spodziewam się że jest to jedno (lub oba) z poniższych:

  1. wydajność kompilacji - C++ ma bardzo skomplikowane reguły parsowania, wliczając szablony i ADL i już teraz czas kompilacji jest problemem
  2. zmieniłoby to semantykę istniejącego kodu - nie przychodzi mi na razie do głowy żaden przykład, ale może coś jest.

SO zdaje się to potwierdzać: https://stackoverflow.com/a/4757817/2456565

1 użytkowników online, w tym zalogowanych: 0, gości: 1