Hi, On Mon, Apr 11, 2005 at 12:04:13PM +0400, Epiphanov Sergei wrote: > Есть программа test.cpp, приложенная в аттаче. > > Стоят GCC 3.3 и GCC 3.4. Даю команды: > > $ GCC_VERSION=3.3 g++ -o test test.cpp > $ ./test > Res1: 7 > Res2: 5 > Res3: 0 > Res4: 1 > $ GCC_VERSION=3.4 g++ -o test test.cpp > test.cpp: In function `int main(int, char**)': > test.cpp:30: error: no matching function for call to `Test::Test(Test)' > test.cpp:7: note: candidates are: Test::Test(Test&) > test.cpp:6: Test::Test(int) > $ > > Глюк в компиляторе 3.4? Программа - это выжимка работы класса QMap из Qt. $ g++ --version |fgrep g++ i586-alt-linux-g++ (GCC) 3.4.3 20050314 (ALT Linux, build 3.4.3-alt6) $ g++ -c test.cpp test.cpp:14: error: `Test' does not name a type test.cpp: In function `int ins(const int&, const Test&)': test.cpp:18: error: `ff' undeclared (first use this function) test.cpp:18: error: (Each undeclared identifier is reported only once for each function it appears in.) test.cpp: In function `int main(int, char**)': test.cpp:28: error: `ff' undeclared (first use this function) test.cpp:29: error: no matching function for call to `Test::Test(Test)' test.cpp:7: note: candidates are: Test::Test(Test&) test.cpp:6: note: Test::Test(int) 1. Определение класса должно завершаться символом ";". 2. Согласно /usr/share/doc/gcc-3.4/NEWS.html, "G++ is now much closer to full conformance to the ISO/ANSI C++ standard. This means, among other things, that a lot of invalid constructs which used to be accepted in previous versions will now be rejected. It is very likely that existing C++ code will need to be fixed." В данном случае речь идёт о том, что конструктор "Test::Test(Test &t)" следует заменить конструктором "Test::Test(const Test &t)". -- ldv