на внде
От: dipso  
Дата: 24.03.14 01:17
Оценка:
Пытался сделать для линухов чтобы тоже.
Не попал.
В винде на экспрессе норм.
Забыл про инклюды.
Только что собрал.Пишет "в третьем".

#include <windows.h>
#include <tchar.h>
#include <string>
#include <iostream>


struct First;

struct VCons
{

    First* first;

    VCons()
    {}

    ~VCons();
};


struct First
{
    First(VCons& vc=VCons())
    {
        vc.first = this;
    }

    virtual void Print()
    {
        std::cout<<"in First"<<std::endl;
    }

    void Init()
    {
        Print();
    }
};

struct Second : public First
{
    Second(VCons& vc=VCons()) : First(vc)
    {}

    void Print()
    {
        std::cout<<"in Second"<<std::endl;
    }
};

struct Third : public Second
{
    Third(VCons& vc=VCons()) : Second(vc)
    {}

    void Print()
    {
        std::cout<<"in Third"<<std::endl;
    }
};

VCons::~VCons()
{

    first->Print();
}

int _tmain(int argc, _TCHAR* argv[])
{
    Third s;

    int i=0;
    std::cin>>i;
    return 0;
}
Re: на внде
От: мыщъх США http://nezumi-lab.org
Дата: 24.03.14 01:32
Оценка:
Здравствуйте, dipso, Вы писали:

D>Только что собрал.Пишет "в третьем".

пишет 5 ошибок
первая попытка ругалась на 4 ошибки

прогресс!
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Re[2]: на внде
От: dipso  
Дата: 24.03.14 01:40
Оценка:
Здравствуйте, мыщъх, Вы писали:

М>Здравствуйте, dipso, Вы писали:


D>>Только что собрал.Пишет "в третьем".

М>пишет 5 ошибок
М>первая попытка ругалась на 4 ошибки

М>прогресс!

Если Вы на линухе — сейчас откапаю msys и проверю gcc.
Но лень(смотри ник).
А лень по коду глазами пробежаться. Чтобы ткнуть носом. Мой код — это ж документ.
Re[3]: на внде
От: мыщъх США http://nezumi-lab.org
Дата: 24.03.14 01:48
Оценка:
Здравствуйте, dipso, Вы писали:

D>Если Вы на линухе — сейчас откапаю msys и проверю gcc.

на маке. clang (C++14 feature complete)

D>Но лень(смотри ник).

зачем тогда писать системно-зависимый код, который не работает на других системах и который непонятно что демонстрирует и зачем.

D>А лень по коду глазами пробежаться. Чтобы ткнуть носом. Мой код — это ж документ.

вот что говорит компилятор:
vc1.cpp:21:18: error: non-const lvalue reference to type 'VCons' cannot bind to a temporary of type 'VCons'
First(VCons& vc=VCons())
^ ~~~~~~~
vc1.cpp:21:18: note: passing argument to parameter 'vc' here
vc1.cpp:39:19: error: non-const lvalue reference to type 'VCons' cannot bind to a temporary of type 'VCons'
Second(VCons& vc=VCons()) : First(vc)
^ ~~~~~~~
vc1.cpp:39:19: note: passing argument to parameter 'vc' here
vc1.cpp:50:18: error: non-const lvalue reference to type 'VCons' cannot bind to a temporary of type 'VCons'
Third(VCons& vc=VCons()) : Second(vc)
^ ~~~~~~~
vc1.cpp:50:18: note: passing argument to parameter 'vc' here
vc1.cpp:67:11: error: no matching constructor for initialization of 'Third'
Third s;
^
vc1.cpp:50:5: note: candidate constructor not viable: requires single argument 'vc', but no arguments were provided
Third(VCons& vc=VCons()) : Second(vc)
^
vc1.cpp:48:8: note: candidate constructor (the implicit copy constructor) not viable: requires 1 argument, but 0 were provided
struct Third : public Second
^
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Re: на внде
От: Vain Россия google.ru
Дата: 24.03.14 02:00
Оценка:
Здравствуйте, dipso, Вы писали:

D>Только что собрал.Пишет "в третьем".

Ну во первых это не по стандарту:
Third(VCons& vc=VCons()) : Second(vc)

надо так:
Third(const VCons& vc=VCons()) : Second(vc)

Иначе твой vc умрет когда захочет компилятор.
Тебе повезло что VCons::~VCons() вызвался после того как Third полностью сконструировался и соответственно vc разрушился позже s.
Соответственно т.к. Print виртуальная, то вызвалась перегруженная функция.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[4]: на внде
От: dipso  
Дата: 24.03.14 02:11
Оценка:
Здравствуйте, мыщъх, Вы писали:
...

Игрался с Visual Studio Express 2008, получилось.
Но gcc 4.7.0 сказал

man@mans /d/1
$ gcc vctest.cpp
vctest.cpp:23:24: error: default argument for parameter of type 'VCons&' has type 'VCons'
vctest.cpp:41:25: error: default argument for parameter of type 'VCons&' has type 'VCons'
vctest.cpp:52:24: error: default argument for parameter of type 'VCons&' has type 'VCons'
vctest.cpp: In function 'int main(int, _TCHAR**)':
vctest.cpp:69:8: error: call to 'Third::Third(VCons&)' uses the default argument for parameter 1, whi
ch is not yet defined

man@mans /d/1
$ gcc -v
Using built-in specs.
COLLECT_GCC=d:\MSYS\mingw\bin\gcc.exe
COLLECT_LTO_WRAPPER=d:/msys/mingw/bin/../libexec/gcc/mingw32/4.7.0/lto-wrapper.exe
Target: mingw32
Configured with: ../gcc-4.7.0/configure --enable-languages=c,c++,ada,fortran,objc,obj-c++ --disable-s
jlj-exceptions --with-dwarf2 --enable-shared --enable-libgomp --disable-win32-registry --enable-libst
dcxx-debug --disable-build-poststage1-with-cxx --enable-version-specific-runtime-libs --build=mingw32
 --prefix=/mingw
Thread model: win32
gcc version 4.7.0 (GCC)
Re[2]: на внде
От: dipso  
Дата: 24.03.14 02:18
Оценка:
Здравствуйте, Vain, Вы писали:

V>Здравствуйте, dipso, Вы писали:


D>>Только что собрал.Пишет "в третьем".

V>Ну во первых это не по стандарту:
V>
V>Third(VCons& vc=VCons()) : Second(vc)
V>

V>надо так:
V>
V>Third(const VCons& vc=VCons()) : Second(vc)
V>

V>Иначе твой vc умрет когда захочет компилятор.
V>Тебе повезло что VCons::~VCons() вызвался после того как Third полностью сконструировался и соответственно vc разрушился позже s.
V>Соответственно т.к. Print виртуальная, то вызвалась перегруженная функция.


Насколько я понимаю этот язык, мой vc должен умереть в конце охватывающего конструктора.
Ошибка моя вероятно в стандарте, да.
Просто амперсанд был в этой теме коньком.
А зачем здесь конст?
Re: на внде
От: dipso  
Дата: 24.03.14 02:34
Оценка:
слова кончились?ткните в стандарт.и ещё на this в конструкторе.
Re[5]: на внде
От: мыщъх США http://nezumi-lab.org
Дата: 24.03.14 02:40
Оценка: +1
Здравствуйте, dipso, Вы писали:

D>Здравствуйте, мыщъх, Вы писали:

D>...

D>Игрался с Visual Studio Express 2008, получилось.

D>Но gcc 4.7.0 сказал
как вообще можно жить не имея нескольких компиляторов под различные платформы -- я не представляю.
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Re[6]: на внде
От: dipso  
Дата: 24.03.14 02:51
Оценка:
Здравствуйте, мыщъх, Вы писали:

М>Здравствуйте, dipso, Вы писали:


D>>Здравствуйте, мыщъх, Вы писали:

D>>...

D>>Игрался с Visual Studio Express 2008, получилось.

D>>Но gcc 4.7.0 сказал
М>как вообще можно жить не имея нескольких компиляторов под различные платформы -- я не представляю.
Ну как. Так.
Может Вы имели ввиду то что не проверил на втором. Какая херня.
Я в основном читаю этот форум как любитель, уже 10 лет, и знаю что Вы здесь Человек который может сказать Слово.
А я — проходящий мимо.
Спасибо что ткнули носом.
Вот ещё бы в стандарт, то да...
Re[3]: на внде
От: Abyx Россия  
Дата: 24.03.14 05:23
Оценка:
Здравствуйте, dipso, Вы писали:

D>Если Вы на линухе — сейчас откапаю msys и проверю gcc.

есть онлайн компиляторы — http://isocpp.org/get-started
In Zen We Trust
Re[3]: на внде
От: Vain Россия google.ru
Дата: 25.03.14 08:45
Оценка:
Здравствуйте, dipso, Вы писали:

V>>Иначе твой vc умрет когда захочет компилятор.

V>>Тебе повезло что VCons::~VCons() вызвался после того как Third полностью сконструировался и соответственно vc разрушился позже s.
V>>Соответственно т.к. Print виртуальная, то вызвалась перегруженная функция.
D>Насколько я понимаю этот язык, мой vc должен умереть в конце охватывающего конструктора.
это ill formed код, он вообще по стандарту не должен компилироваться и, соответственно, vc умрёт тогда когда пожелает левая нога компилятора

D>Ошибка моя вероятно в стандарте, да.

студия не следует стандарту достаточно давно, так что это и не удивительно

D>А зачем здесь конст?

читай про rvalue
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[4]: на внде
От: MasterZiv СССР  
Дата: 26.03.14 14:05
Оценка:
On 25.03.2014 12:45, Vain wrote:

> D>Ошибка моя вероятно в стандарте, да.

> студия не следует стандарту достаточно давно, так что это и не удивительно

Сказать лучше -- она давно следует стандарту только там, где хочет...
Posted via RSDN NNTP Server 2.1 beta
Re[2]: на внде
От: wander  
Дата: 28.03.14 16:14
Оценка:
Здравствуйте, dipso, Вы писали:

D>ткните в стандарт


Про ссылки: 8.5.3/5
И до кучи про rvalues and lvalues: 3.10 целиком.
Re[7]: на внде
От: dr. Acula Украина  
Дата: 28.03.14 18:14
Оценка: -1
D>>>Игрался с Visual Studio Express 2008, получилось.
D>>>Но gcc 4.7.0 сказал
М>>как вообще можно жить не имея нескольких компиляторов под различные платформы -- я не представляю.
D>Ну как. Так.
D>Может Вы имели ввиду то что не проверил на втором. Какая херня.
D>Я в основном читаю этот форум как любитель, уже 10 лет, и знаю что Вы здесь Человек который может сказать Слово.
D>А я — проходящий мимо.
D>Спасибо что ткнули носом.
D>Вот ещё бы в стандарт, то да...

Доктор?
Выпустили? Когда уже туалеты мыть предложите?
Или сразу в архитекторы/пастыри?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.