gug-bg-herd
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [debian] [avifile/C++] Молба за съвет относно #564868: FTBFS with g


From: George Danchev
Subject: Re: [debian] [avifile/C++] Молба за съвет относно #564868: FTBFS with gcc-4.5
Date: Wed, 13 Jan 2010 19:00:04 +0200
User-agent: KMail/1.12.4 (Linux/2.6.30-2-686; KDE/4.3.4; i686; ; )

Yavor Doganov writes:
> [ Радвам се, че дебианския списък се върна. ]

Нямам време да погледна точно сега, но статични членове (константни или не) се 
инициализират така:

http://www.icce.rug.nl/documents/cplusplus/cplusplus11.html

Например:

#include <iostream>
#include <assert.h>

class C
{
   static C* m_pSelf;
   static C* singleton();
};

// Забележка: непосредствено след дефиницията на класа 
// (ако е в хедъра, то там), а може и вътре в нея
C* C::m_pSelf = 0;

C* C::singleton()
{
   assert(m_pSelf != 0);
   return m_pSelf;
};

int main()
{
   return 0;
}


Освен това, не е ясно върнатия указател от това new къде отива, май искате да 
е в m_pSelf:

void AvmOutput::createAvmOutput()
{
    new AvmOutput();
}

Ето  пример за Singleton:
http://www.yolinux.com/TUTORIALS/C++Singleton.html

> [ Списъкът на GUG-BG е в CC, защото ми помогнаха с някои съвети около
>   моите QA-премеждия с avifile, така че допускам някои от абонатите са
>   запознати поне бегло с кода. ]
> 
> Понеже съм много (ама мноооо) бос по отношение на C++, моля за съвет
> относно avifile и #564868.
> avifile/1:0.7.48~20090503.ds-2 не се компилира с GCC 4.5 [1]:

Бах, от де взе GCC 4.5, gcc-snapshot от experimental не е 4.5, доколкото 
виждам.

> common/avm_output.cpp:17:1: error: 'avm::AvmOutput::AvmOutput' names the
> constructor, not the type
> common/avm_output.cpp:58:1: error: 'avm::AvmOutput::AvmOutput' names the
> constructor, not the type
> 
> [1] http://bugs.debian.org/564868
> 
> Доколкото разбирам, това е следствие от частичната реализация на DR
> 176 [2] и свързаните DR 382 [3], DR 147 [4] (и може би някои други).
> 
> [2] http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#176
> [3] http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#382
> [4] http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#147

Тези май са за други случаи ;-) Доколкото знам само компилаторите могат да 
извикват конструктори Тип::Тип, а ти се опитваш и да връщаш това. Това което 
искаш е само Тип или Тип* ;-)

> В случая AvmOutput::AvmOutput наистина е конструктора, но понеже типа
> е именуван по същия начин, няма как той да се укаже (според моето
> съвсем скромно мнение), освен с ключовата дума `typename'.  Понеже GCC
> 4.4 и надолу дават грешка (`typename' е приложимо само за шаблони),
> което доколкото разбирам е ненужно ограничение в контекста на новия
> стандарт, то е премахнато в ствола [5] на GCC.  С други думи, след
> доста часове главоблъскане и четене не виждам друг начин за корекция
> на тази грешка, така че кода да се компилира с всички (модерни) версии
> на GCC.

Аз доколкото знам typename се използва само във връзка с шаблони, не съм много 
сигурен дали C++-0X добавя още приложения за typename, но за това което се 
опитвате да имплементирате не са ви нужни такива приложения по мое мнение.

-- 
pub 4096R/0E4BD0AB <people.fccf.net/danchev/key pgp.mit.edu>

reply via email to

[Prev in Thread] Current Thread [Next in Thread]