[Top][All Lists]
[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>