ALT Linux Sisyphus discussions
 help / color / mirror / Atom feed
* [sisyphus] GCC 3.3 vs GCC 3.4
@ 2005-04-11  8:04 Epiphanov Sergei
  2005-04-11  8:53 ` Dmitry Kazimirov
  2005-04-11 10:41 ` Dmitry V. Levin
  0 siblings, 2 replies; 8+ messages in thread
From: Epiphanov Sergei @ 2005-04-11  8:04 UTC (permalink / raw)
  To: Рассылка Sisyphus

[-- Attachment #1: Type: text/plain, Size: 567 bytes --]

Есть программа 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.

-- 
С уважением, Епифанов Сергей

[-- Attachment #2: test.cpp --]
[-- Type: text/x-c++src, Size: 533 bytes --]

#include <stdio.h>

class Test{
	public:
		Test(){ i_num = 0; }
		Test(int i){ i_num = i; }
		Test(Test &t){ i_num = t.i_num; }
		~Test(){}
		int num() { return i_num; }
	private:
		int i_num;
}

Test ff(0);
int ii = 0;

int ins( const int& i, const Test &t) {
	ff = t;
	return ( ii = i );
}

int main(int argc, char **argv){
	Test t(5);
	Test t1(7);
	printf( "Res1: %d\n", t1.num() );
	t1 = t;
	printf( "Res2: %d\n", t1.num() );
	printf( "Res3: %d\n", ff.num() );
	ins( 2, Test(1) );
	printf( "Res4: %d\n", ff.num() );
	return 0;
}

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [sisyphus] GCC 3.3 vs GCC 3.4
  2005-04-11  8:04 [sisyphus] GCC 3.3 vs GCC 3.4 Epiphanov Sergei
@ 2005-04-11  8:53 ` Dmitry Kazimirov
  2005-04-11 10:41 ` Dmitry V. Levin
  1 sibling, 0 replies; 8+ messages in thread
From: Dmitry Kazimirov @ 2005-04-11  8:53 UTC (permalink / raw)
  To: ALT Linux Sisyphus discussion list

> Есть программа test.cpp, приложенная в аттаче.
Если принять во внимание, что в 12-й строке пропущена
запятая, завершающая определение класса, пример
должен компилироваться любым компилятором.

К сожалению, у меня сейчас нет возможности проверить.
Но скорее всего, причина в этом, что означает, что компилятор
g++ имеет устойчивую тенденцию к ухудшению качества
сообщений об ошибках.



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [sisyphus] GCC 3.3 vs GCC 3.4
  2005-04-11  8:04 [sisyphus] GCC 3.3 vs GCC 3.4 Epiphanov Sergei
  2005-04-11  8:53 ` Dmitry Kazimirov
@ 2005-04-11 10:41 ` Dmitry V. Levin
  2005-04-11 11:46   ` Epiphanov Sergei
  1 sibling, 1 reply; 8+ messages in thread
From: Dmitry V. Levin @ 2005-04-11 10:41 UTC (permalink / raw)
  To: ALT Linux Sisyphus mailing list

[-- Attachment #1: Type: text/plain, Size: 1856 bytes --]

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

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [sisyphus] GCC 3.3 vs GCC 3.4
  2005-04-11 10:41 ` Dmitry V. Levin
@ 2005-04-11 11:46   ` Epiphanov Sergei
  2005-04-11 12:12     ` Andrey Rahmatullin
  0 siblings, 1 reply; 8+ messages in thread
From: Epiphanov Sergei @ 2005-04-11 11:46 UTC (permalink / raw)
  To: ALT Linux Sisyphus mailing list

В сообщении от 11 Апрель 2005 14:41 Dmitry V. Levin написал:

> В данном случае речь идёт о том, что конструктор "Test::Test(Test &t)"
> следует заменить конструктором "Test::Test(const Test &t)".

То есть надо править Qt или ждать когда разработчики исправят это сами? Я 
имею в виду файл qmap.h, определение оператора [] для класса QMap.

-- 
С уважением, Епифанов Сергей


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [sisyphus] GCC 3.3 vs GCC 3.4
  2005-04-11 11:46   ` Epiphanov Sergei
@ 2005-04-11 12:12     ` Andrey Rahmatullin
  2005-04-11 12:24       ` Epiphanov Sergei
  0 siblings, 1 reply; 8+ messages in thread
From: Andrey Rahmatullin @ 2005-04-11 12:12 UTC (permalink / raw)
  To: sisyphus

[-- Attachment #1: Type: text/plain, Size: 642 bytes --]

On Mon, Apr 11, 2005 at 03:46:53PM +0400, Epiphanov Sergei wrote:
> То есть надо править Qt или ждать когда разработчики исправят это сами? Я 
У вас не работает прога, включающая qmap.h? Покажите ее.
> имею в виду файл qmap.h, определение оператора [] для класса QMap.
    T& operator[] ( const Key& k );
Это что ли? А что здесь неправильно?

-- 
WBR, wRAR (ALT Linux Team)
Powered by the ALT Linux fortune(8):

Судя по развернувшейся бурной переписке между интересующимися и вашим
покорным слугой, не помешает, однако, вначале изложить некоторую теорию,
чтобы предварить ваши вопросы моими ответами.
		-- morozov in sisyphus@

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [sisyphus] GCC 3.3 vs GCC 3.4
  2005-04-11 12:12     ` Andrey Rahmatullin
@ 2005-04-11 12:24       ` Epiphanov Sergei
  2005-04-11 12:40         ` Andrey Rahmatullin
  0 siblings, 1 reply; 8+ messages in thread
From: Epiphanov Sergei @ 2005-04-11 12:24 UTC (permalink / raw)
  To: Andrey Rahmatullin, sisyphus

В сообщении от 11 Апрель 2005 16:12 Andrey Rahmatullin написал:
> On Mon, Apr 11, 2005 at 03:46:53PM +0400, Epiphanov Sergei wrote:
> > То есть надо править Qt или ждать когда разработчики исправят это
> > сами? Я
>
> У вас не работает прога, включающая qmap.h? Покажите ее.
>
> > имею в виду файл qmap.h, определение оператора [] для класса QMap.
>
>     T& operator[] ( const Key& k );
> Это что ли? А что здесь неправильно?

template<class Key, class T>
Q_INLINE_TEMPLATES T& QMap<Key,T>::operator[] ( const Key& k )
{
    detach();
    QMapNode<Key,T>* p = sh->find( k ).node;
    if ( p != sh->end().node )
        return p->data;
    return insert( k, T() ).data();
}

Проблема в строке

return  insert( k, T() ).data();

А программа проста:


QMap<int,QString> map;
QString s("Str");
map[0]=s;


-- 
С уважением, Епифанов Сергей


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [sisyphus] GCC 3.3 vs GCC 3.4
  2005-04-11 12:24       ` Epiphanov Sergei
@ 2005-04-11 12:40         ` Andrey Rahmatullin
  2005-04-11 13:31           ` Epiphanov Sergei
  0 siblings, 1 reply; 8+ messages in thread
From: Andrey Rahmatullin @ 2005-04-11 12:40 UTC (permalink / raw)
  To: sisyphus

[-- Attachment #1: Type: text/plain, Size: 653 bytes --]

On Mon, Apr 11, 2005 at 04:24:48PM +0400, Epiphanov Sergei wrote:
> QMap<int,QString> map;
> QString s("Str");
> map[0]=s;
wrar@wrars-comp ~ $ <test.cpp
#include <qmap.h>

int main()
{
  QMap<int,QString> map;
  QString s("Str");
  map[0]=s;
  return 0;
}
wrar@wrars-comp ~ $ g++ test.cpp -I/usr/lib/qt3/include -L/usr/lib/qt3/lib -lqt-mt
wrar@wrars-comp ~ $ ./a.out
wrar@wrars-comp ~ $ rpm -q libqt3 gcc3.4
libqt3-3.3.4-alt3
gcc3.4-3.4.3-alt6



-- 
WBR, wRAR (ALT Linux Team)
Powered by the ALT Linux fortune(8):

Ну дык думать надо сообща. Одна голова хорошо, а две лучше, хоть и не очень
удобно ;)
		-- dketov in devel@

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [sisyphus] GCC 3.3 vs GCC 3.4
  2005-04-11 12:40         ` Andrey Rahmatullin
@ 2005-04-11 13:31           ` Epiphanov Sergei
  0 siblings, 0 replies; 8+ messages in thread
From: Epiphanov Sergei @ 2005-04-11 13:31 UTC (permalink / raw)
  To: Andrey Rahmatullin, sisyphus

Всё, прошу прощения, торможу. Бью себя правой пяткой по левому уху. 
Использовал свой класс, а в нём конструктор копирования записан как

Test(Test &t);

а не как

Test(const Test &t);

Переписал как положено и заработало. Спасибо всем!

-- 
С уважением, Епифанов Сергей


^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2005-04-11 13:31 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2005-04-11  8:04 [sisyphus] GCC 3.3 vs GCC 3.4 Epiphanov Sergei
2005-04-11  8:53 ` Dmitry Kazimirov
2005-04-11 10:41 ` Dmitry V. Levin
2005-04-11 11:46   ` Epiphanov Sergei
2005-04-11 12:12     ` Andrey Rahmatullin
2005-04-11 12:24       ` Epiphanov Sergei
2005-04-11 12:40         ` Andrey Rahmatullin
2005-04-11 13:31           ` Epiphanov Sergei

ALT Linux Sisyphus discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/sisyphus/0 sisyphus/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 sisyphus sisyphus/ http://lore.altlinux.org/sisyphus \
		sisyphus@altlinux.ru sisyphus@altlinux.org sisyphus@lists.altlinux.org sisyphus@lists.altlinux.ru sisyphus@lists.altlinux.com sisyphus@linuxteam.iplabs.ru sisyphus@list.linux-os.ru
	public-inbox-index sisyphus

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.sisyphus


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git