Автор Тема: Програмирование на C++  (Прочитано 76695 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Mr2

  • Пользователь
  • Сообщений: 1594
  • Пол: Мужской
  • Free roaming sorcerer
    • Facebook
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #180 : 17 Март 2011, 17:05:00 »
P.S. Поменьше слушай Mr2, он часто глупости говорит.

Слушай HoRRoR'a  и не подвергай его откровения сомнению, это истина в последней инстанции. :lol:
А ещё плохо знаком с сабжем, раз осмеивает возможность присвоения объекту самому себе.
Разве я гдето говорил что я программист от Бога? :D
Про присваение объекта самому себе говорю лишь в контексте данной программы. ;)

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #181 : 17 Март 2011, 17:16:53 »
Mr2,ну просто не использовать указатели и иже с ними(выделение памяти например, арифметику указателей)  это тоже непрактично же и делает программу менее универсальной. Чтобы помнить что переменная является указателем Дейтел советует использовать в имени ptr, в этом случае обычно не забываешь что это указатель.

Оффлайн Mr2

  • Пользователь
  • Сообщений: 1594
  • Пол: Мужской
  • Free roaming sorcerer
    • Facebook
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #182 : 17 Март 2011, 17:33:50 »
Mr2,ну просто не использовать указатели и иже с ними(выделение памяти например, арифметику указателей)  это тоже непрактично же и делает программу менее универсальной.
Ты писал про забытую ссылку(Ответ #175), вот я и говорю что нужно быть остарожнее и внимательнее. Особенно с указателями и выделением памяти. Если ты их используешь то должен держать их под контролем, а не забывать где ты выделил, где удалил, ссылается ли ссылка на существующий или на не существующий объект. Избежать лишних проблем можно не используя указатели там где без них можно обойдтись. Ну а если твоя программа что то теряет без них то отказываться конечно глупо.
Плюс в том что можно избежать неприятных табличек. :D
 
Чтобы помнить что переменная является указателем Дейтел советует использовать в имени ptr, в этом случае обычно не забываешь что это указатель.
В winapi пишут перед именем указателя  p.
 pHight.
« Последнее редактирование: 17 Март 2011, 17:44:08 от Mr2 »

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #183 : 17 Март 2011, 23:46:11 »
Делал программку для хранения дробей, кое-что из задуманного не получилось - не получается вывести в поток конструкцию вида (a+b), но при этом я могу сделать c=a+b, где a, b и c - объекты одного класса.

# include <iostream>
# include <iomanip>
using namespace std;

class RationalNumber
{
friend ostream &operator<<(ostream &output, RationalNumber &abc);
public:
    // констркутор по умолчанию, проверяет что дробная часть >0
    // +проверяет можно ли сократить дробь
    RationalNumber(int a=1, int b=1)
    {
        nominator=(a>0) ? a:1;
        denominator=(b>0)? b:1;
        for (int i=2;i<=nominator;i++)
         if (denominator%i==0 && nominator%i==0 )
         {
             nominator/=i;
             denominator/=i;
         }

    }

    // возможность сложения двух объектов класса RationalNumber
    RationalNumber operator+(RationalNumber &right)
    {
        if (denominator==right.denominator) //если знаменатели равны
         return RationalNumber(nominator+right.nominator,denominator);
        int temp; //иначе
        temp=denominator*right.denominator; // определяем новый знаменатель
        return RationalNumber(((temp/denominator*nominator)+(temp/right.denominator*right.nominator))
        ,temp);
    }

    RationalNumber operator-(RationalNumber &right)
    {
        if (denominator==right.denominator) //если знаменатели равны
         return RationalNumber(nominator-right.nominator,denominator);
        int temp; //иначе
        temp=denominator*right.denominator; // определяем новый знаменатель
        return RationalNumber((temp/denominator)*nominator, (temp/right.denominator)*right.nominator);
    }


private:
    int nominator; // числитель
    int denominator; // знаменатель
};

ostream &operator<<(ostream &output, RationalNumber &abc)
{
    output<<abc.nominator;
        if (abc.denominator>1) //если знаменатель не =1 (число не целое)
     output<<"/"<<abc.denominator<<endl;
     return output;
}


int main()
{
    RationalNumber a(17,10);
    RationalNumber b(20,10);
    RationalNumber c;
    cout<<"A: "<<a;
    cout<<"B: "<<b<<endl;
    cout<<(c=a+b); // МОЖНО
    cout<<(a+b); // НЕЛЬЗЯ
}

« Последнее редактирование: 17 Март 2011, 23:52:39 от gepar »

Оффлайн HoRRoR

  • Пользователь
  • Сообщений: 983
  • Пол: Мужской
  • Ромхакер
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #184 : 18 Март 2011, 00:15:00 »
Добавь волшебное слово const перед RationalNumber &abc при перегрузке оператора вывода в поток.

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #185 : 18 Март 2011, 00:33:33 »
HoRRoR, волшебник  :) Раскрой фокус
 ostream &operator<<(ostream &output, const RationalNumber &abc)
тут ведь получается  что я запрещаю редактирование данных что я передаю в поток и это никак не связано же с возвращаемыми данными.

Оффлайн HoRRoR

  • Пользователь
  • Сообщений: 983
  • Пол: Мужской
  • Ромхакер
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #186 : 18 Март 2011, 01:00:15 »
Я сам толком не знаю (точнее - не помню, потому как этому меня обучали) всех тонкостей, но это связано с созданием временного объекта. Я так понимаю, получить неконстантную ссылку извне на него нельзя. Либо передавать временный объект по значению, т.е. с созданием ещё одного временного объекта, либо передавать константной ссылкой.

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #187 : 18 Март 2011, 13:03:10 »
HoRRoR,ага, если передавать копию то тоже получилось скомпилировать.

Добавлено позже:
Тут мне написали мол в vs компилируется нормально мой код и с той магической const при перегрузке оператора вывода и без неё да только как заставить vs2010 компилировать код, когда у него на любой мой код одна ошибка:
1>Построение начато 18.03.2011 12:02:40.
1>InitializeBuildStatus:
1>  Обращение к "Debug\New2.unsuccessfulbuild".
1>ClCompile:
1>  New2.cpp
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(15): error C2143: синтаксическая ошибка: отсутствие ";" перед "'template<'"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(15): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(18): error C2143: синтаксическая ошибка: отсутствие "," перед "<"
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(860): см. ссылку на создание экземпляров класса шаблон при компиляции "basic_istream<_Elem,_Traits>"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(22): error C2143: синтаксическая ошибка: отсутствие ";" перед "<"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(22): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(22): error C2238: непредвиденные лексемы перед ";"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(23): error C2143: синтаксическая ошибка: отсутствие ";" перед "<"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(23): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(23): error C2238: непредвиденные лексемы перед ";"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(24): error C2143: синтаксическая ошибка: отсутствие ";" перед "<"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(24): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(24): error C2238: непредвиденные лексемы перед ";"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(25): error C2143: синтаксическая ошибка: отсутствие ";" перед "<"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(25): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(25): error C2238: непредвиденные лексемы перед ";"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(26): error C2143: синтаксическая ошибка: отсутствие ";" перед "<"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(26): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(26): error C2238: непредвиденные лексемы перед ";"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(29): error C2146: синтаксическая ошибка: отсутствие ";" перед идентификатором "basic_istream"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(29): error C2071: basic_istream<_Elem,_Traits>::__CLR_OR_THIS_CALL: недопустимый класс хранения
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(29): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(29): error C2061: синтаксическая ошибка: идентификатор "_Mysb"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(37): error C2146: синтаксическая ошибка: отсутствие ";" перед идентификатором "basic_istream"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(37): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(37): error C2473: _Uninitialized: выглядит как определение функции, но без списка параметров.
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(39): error C2653: ios_base: не является именем класса или пространства имен
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(39): error C2059: синтаксическая ошибка: this
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(39): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(39): warning C4183: _Addstd: отсутствие возвращаемого типа; предполагается функция-член, возвращающая "int"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(42): error C2146: синтаксическая ошибка: отсутствие ";" перед идентификатором "__CLR_OR_THIS_CALL"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(923): error C2143: синтаксическая ошибка: отсутствие "," перед "<"
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(965): см. ссылку на создание экземпляров класса шаблон при компиляции "basic_iostream<_Elem,_Traits>"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(928): error C2143: синтаксическая ошибка: отсутствие ";" перед "<"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(928): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(928): error C2238: непредвиденные лексемы перед ";"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(929): error C2059: синтаксическая ошибка: <
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(929): error C2238: непредвиденные лексемы перед ";"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(936): error C2146: синтаксическая ошибка: отсутствие ";" перед идентификатором "basic_iostream"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(936): error C2071: basic_iostream<_Elem,_Traits>::__CLR_OR_THIS_CALL: недопустимый класс хранения
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(936): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(936): error C2143: синтаксическая ошибка: отсутствие ")" перед "<"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(936): error C2143: синтаксическая ошибка: отсутствие ";" перед "<"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(936): error C2059: синтаксическая ошибка: )
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(936): error C2334: непредвиденные лексемы перед ":"; пропуск вероятного тела функции
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(942): error C2146: синтаксическая ошибка: отсутствие ";" перед идентификатором "basic_iostream"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(942): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(950): error C2143: синтаксическая ошибка: отсутствие ";" перед "="
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(951): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(956): error C2146: синтаксическая ошибка: отсутствие ";" перед идентификатором "swap"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(956): error C2182: __CLR_OR_THIS_CALL: недопустимое использование типа "void"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(956): error C2040: basic_iostream<_Elem,_Traits>::__CLR_OR_THIS_CALL: "int" отличается по уровням косвенного обращения от "basic_iostream<_Elem,_Traits> &"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(957): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(960): warning C4183: swap: отсутствие возвращаемого типа; предполагается функция-член, возвращающая "int"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(962): error C2143: синтаксическая ошибка: отсутствие ";" перед "~"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(962): error C2433: basic_iostream<_Elem,_Traits>::__CLR_OR_THIS_CALL: "virtual" не разрешается для объявлений данных
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(962): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1137): error C2146: синтаксическая ошибка: отсутствие ";" перед идентификатором "ws"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1137): error C2433: __CLRCALL_OR_CDECL: "inline" не разрешается для объявлений данных
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1137): error C2530: __CLRCALL_OR_CDECL: ссылки должны быть инициализированы
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1137): error C2065: _Elem: необъявленный идентификатор
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1137): error C2065: _Traits: необъявленный идентификатор
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1170): error C2065: char_traits: необъявленный идентификатор
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1170): error C2062: тип "char" не требуется
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1171): error C2065: char_traits: необъявленный идентификатор
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1171): error C2062: тип "char" не требуется
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1171): error C2059: синтаксическая ошибка: )
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1172): error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1177): error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1178): error C2653: ios_base: не является именем класса или пространства имен
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1178): error C2653: ios_base: не является именем класса или пространства имен
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1179): error C2065: _Elem: необъявленный идентификатор
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1179): error C2065: _Traits: необъявленный идентификатор
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1179): error C2039: sentry: не является членом "basic_istream"
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(18): см. объявление "basic_istream"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1182): error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1184): error C2065: ctype: необъявленный идентификатор
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1184): error C2065: _Elem: необъявленный идентификатор
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1184): error C2059: синтаксическая ошибка: )
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1187): error C2653: _Traits: не является именем класса или пространства имен
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1187): error C2143: синтаксическая ошибка: отсутствие ")" перед ";"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1188): error C2059: синтаксическая ошибка: )
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1189): error C2653: _Traits: не является именем класса или пространства имен
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1189): error C2653: _Traits: не является именем класса или пространства имен
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1189): error C2065: _Meta: необъявленный идентификатор
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1190): error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1191): error C2653: ios_base: не является именем класса или пространства имен
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1193): error C2143: синтаксическая ошибка: отсутствие ";" перед "}"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1194): error C2039: space: не является членом "`global namespace'"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1195): error C2653: _Traits: не является именем класса или пространства имен
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1195): error C2065: _Meta: необъявленный идентификатор
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1195): error C3861: to_char_type: идентификатор не найден
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1195): error C2143: синтаксическая ошибка: отсутствие "," перед ")"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1198): error C2143: синтаксическая ошибка: отсутствие ";" перед "}"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1201): error C2143: синтаксическая ошибка: отсутствие ";" перед "}"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1203): error C2143: синтаксическая ошибка: отсутствие ";" перед "}"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1205): error C2065: char_traits: необъявленный идентификатор
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1205): error C2062: тип "wchar_t" не требуется
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1206): error C2065: char_traits: необъявленный идентификатор
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1206): error C2062: тип "wchar_t" не требуется
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1206): error C2059: синтаксическая ошибка: )
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1207): error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1212): error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1213): error C2653: ios_base: не является именем класса или пространства имен
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1213): error C2653: ios_base: не является именем класса или пространства имен
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1214): error C2065: _Elem: необъявленный идентификатор
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1214): error C2065: _Traits: необъявленный идентификатор
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1214): error C2039: sentry: не является членом "basic_istream"
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(18): см. объявление "basic_istream"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1217): error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1219): error C2065: ctype: необъявленный идентификатор
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1219): error C2065: _Elem: необъявленный идентификатор
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1219): error C2059: синтаксическая ошибка: )
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1222): error C2653: _Traits: не является именем класса или пространства имен
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1222): error C2143: синтаксическая ошибка: отсутствие ")" перед ";"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1223): error C2059: синтаксическая ошибка: )
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1224): error C2653: _Traits: не является именем класса или пространства имен
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1224): error C2653: _Traits: не является именем класса или пространства имен
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1224): error C2065: _Meta: необъявленный идентификатор
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1225): error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1226): error C2653: ios_base: не является именем класса или пространства имен
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1228): error C2143: синтаксическая ошибка: отсутствие ";" перед "}"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1228): fatal error C1003: число ошибок превышает 100; остановка компиляции
1>
1>СБОЙ построения.
1>
1>Затраченное время: 00:00:01.38
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========


Оффлайн HoRRoR

  • Пользователь
  • Сообщений: 983
  • Пол: Мужской
  • Ромхакер
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #188 : 18 Март 2011, 17:48:05 »
У меня в 2008-й студии компилируется. Менял что-нибудь? Наверняка в коде какой-нибудь лишний символ или наоборот - забыл что-то закрыть.
Вообще, надо бы по поводу временных объектов и ссылок почитать спецификацию, мне аж интересно стало... По идее, менять временный объект по ссылке ничего не запрещает, но M$ придерживается спецификаций меньше, чем GNU. Так что я прям озадачен.
P.S. Мой тебе совет - не используй русифицированные средства разработки.

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #189 : 18 Март 2011, 17:55:01 »
HoRRoR,думаешь в этом дело?  Ато я сейчас и Hello World попробовал скомпилировать и все те же самые ошибки, попробую ка я скачать англ. версию этой vs2010, я ведь русскую качал ещё когда только hello world думал чем бы откомпилировать. Думал там и правда польза с неё будет и с её хелпа, а на деле пользы 0 от русского интерфейса.

Оффлайн HoRRoR

  • Пользователь
  • Сообщений: 983
  • Пол: Мужской
  • Ромхакер
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #190 : 18 Март 2011, 18:15:21 »
Ну тогда вряд ли в этом... Ставь английскую версию, а файлы справки попробуй потом отдельно поставить с русифицированного пакета. А то переводу интерфейса даже промт позавидует, не говоря уже о возникающих косяках... Хотя, может ставить русскую справку на английскую версию - заведомо глупая идея.

Вот что говорит википедия:
Цитата
параметры ссылки, не помеченные const, могут только быть адресуемыми значениями:
Это вполне очевидно. Теперь вопрос в том, в каких случаях временные объекты являются адресуемыми значениями. Если помечать как const, то само собой, что можно передавать и константы непосредственно, но вот является ли создаваемый временный объект константным? Физически-то объект есть, и он не константа...

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #191 : 18 Март 2011, 21:58:13 »
Встретился с директивой define и возник вопрос : а вот зачем она?
Она ведь по сути представляет собой обычную глобальную переменную /функцию. Не проще ли просто в начале программы написать без define эту const переменную/функцию. Или она как-то по особенному работает (быстрее или ещё что)? Ответьте в двух словах пожалуйста, в инете я уже посмотрел как ею пользоваться.
Хотя вот выгуглил ещё что define эта создаёт макроконстанту, но мне не понятно что значит это слово, ну не маленькая же константа :)
« Последнее редактирование: 18 Март 2011, 22:00:19 от gepar »

Оффлайн Mr2

  • Пользователь
  • Сообщений: 1594
  • Пол: Мужской
  • Free roaming sorcerer
    • Facebook
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #192 : 18 Март 2011, 22:13:52 »
Хотя вот выгуглил ещё что define эта создаёт макроконстанту, но мне не понятно что значит это слово, ну не маленькая же константа :)
Помоему это пережитки прошлого.В "C" небыло "const". Макро подстановка значит что везде где встретится ONE(#define ONE 1)
компилятор  подставит 1.
 result = ONE.
Также можно создавать inline функуии.
« Последнее редактирование: 18 Март 2011, 22:58:16 от Mr2 »

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #193 : 18 Март 2011, 22:17:09 »
Mr2,ну то что подставит то ясно, но какое отличие #define a 1 от той же const a(1) написанной в начале программы?

Оффлайн Mr2

  • Пользователь
  • Сообщений: 1594
  • Пол: Мужской
  • Free roaming sorcerer
    • Facebook
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #194 : 18 Март 2011, 22:26:48 »
Mr2,ну то что подставит то ясно, но какое отличие #define a 1 от той же const a(1) написанной в начале программы?
Видимо в "C" небыло "const" и "inline" по этому использовали #define. Это надо уточнить у того кто на "C" пишет.
АгА, всё верно.
Цитата
These are new in Standard C, although the idea of const has been borrowed from C++. Let us get one thing straight: the concepts of const and volatile are completely independent. A common misconception is to imagine that somehow const is the opposite of volatile and vice versa. They are unrelated and you should remember the fact.
Источник.
« Последнее редактирование: 18 Март 2011, 22:57:08 от Mr2 »

Оффлайн HoRRoR

  • Пользователь
  • Сообщений: 983
  • Пол: Мужской
  • Ромхакер
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #195 : 19 Март 2011, 00:02:43 »
Вы в корне неверно понимаете предназначение define. Это уровень препроцессора - т.е. эти директивы выполняются ещё до компиляции.
Например:
#if defined(ABC)
int abc = 1;
#else
cout << "error: not supported!" << endl;
#endif

#if ABC==1
...
#else
...
#endif
Если ABC объявлено через define, то будет компилироваться первый кусок кода, если нет - то второй. Далее должно быть понятно.

Далее - define по сути создаёт мнемонику. Написав #define x y вы будете получать подстановку y вместо x.

Ещё - через define можно объявлять макросы.
#define foo(x,y) (x+y*y-100)
cout << foo(10, 20) << endl;
И инлайн-функции и макросы - разные понятия, хоть и схожи по предназначению. В макросах можно что угодно задать, вплоть до упрощённого синтаксиса описания данных.

В общем, спектр применения define очень широк. А в качестве констант его можно использовать при конфигурации проекта. Например:
#ifdef WINDOWS
# define X 100
#else
# define X 200
#endif

Оффлайн Mr2

  • Пользователь
  • Сообщений: 1594
  • Пол: Мужской
  • Free roaming sorcerer
    • Facebook
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #196 : 19 Март 2011, 00:22:24 »
HoRRoR, а соль то в чём? :?
 Что полезного во всех этих заморочках? Вот в чём вопрос. То что можно это понятно, но нужно ли? В каких ситуациях?

Оффлайн HoRRoR

  • Пользователь
  • Сообщений: 983
  • Пол: Мужской
  • Ромхакер
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #197 : 19 Март 2011, 01:13:06 »
Да без этого, в общем-то, не обойтись там, где нужна условная компиляция. При наличии нескольких конфигураций проекта, при настройке проекта через заголовочные файлы, при необходимости сделать код более лаконичным засчёт макросов и т.п., да и вообще при необходимости условной компиляции и прочего.
Например, грубый пример - у тебя есть проект в двух конфигурациях, для windows и для linux. У тебя есть два заголовочных файла для двух этих конфигураций - c_windows.h и c_linux.h. Делаешь так:
#if defined(_WINDOWS_)
# include "c_windows.h"
#elif defined(_LINUX_)
# include "c_linux.h"
#else
# error "Not configured!"
#endif

Или у тебя две конфигурации проекта для двух разных устройств с разным фиксированным разрешением экрана. Делаешь так:
#if defined(FIRST_DEVICE)
# define SCREEN_W 1024
# define SCREEN_H 768
#else
# define SCREEN_W 640
# define SCREEN_H 480
#endif

int main()
{
    Color *screen_buf = new Color32[SCREEN_W * SCREEN_H];
    ...
    delete []screen_buf;
    return 0;
}

Оффлайн Mr2

  • Пользователь
  • Сообщений: 1594
  • Пол: Мужской
  • Free roaming sorcerer
    • Facebook
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #198 : 19 Март 2011, 01:20:21 »
Понятно. То есть эффективность в основном  в условной компиляции. :)
 

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #199 : 19 Март 2011, 01:35:30 »
HoRRoR,спасибо за лекцию  :) Ато что-то я в преподше моей по с++ разочаровался, я же до этого лабы читал лишь задания (кроме структур), а тут вот и теорию что она даёт перед заданиями по классах почитал ... в общем тихий ужас, сразу видно что те примеры что она писала она не компилировала(часто действия пропущены и только догадываешься чего не хватает + без 4 как min правок ни один пример не откомпилировать) ... а деструкторы которые ничего не делают, а только существуют ... а выделение памяти через maloc, а удаление через delete (хотя это я уже придираюсь) ... а то что нигде нет указанного пространства имён ... это хорошо что я с Дейтела начал, по тем конспектам преподши поди пойми что-то.

Оффлайн HoRRoR

  • Пользователь
  • Сообщений: 983
  • Пол: Мужской
  • Ромхакер
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #200 : 19 Март 2011, 01:51:46 »
Понятно. То есть эффективность в основном  в условной компиляции.
Да как бы сказать... это единственный способ условной компиляции. Ну если не считать шаблоны за условную компиляцию. Так что о эффективности можно не говорить.

Ато что-то я в преподше моей по с++ разочаровался
Да с преподавателями вообще беда. Они в основном теоретики и зачитывают наизусть заученные тексты, многое не понимая и постоянно делая ляпы. Наша преподавательница работала программистом C#, но читала курс C++. Постоянно делала ляпы, не знала что такое GNU GCC, т.е. ни с чем, кроме студии, не работала. Сначала с ней спорил, думая, что она действительно так считает. А оказывается она просто толком ничего не знает :D

а выделение памяти через maloc, а удаление через delete (хотя это я уже придираюсь) ...
Да нет, это грубая ошибка. Всё зависит от реализации, конечно, но обычно используются разные методы для выделения памяти, следовательно - разные механизмы её высвобождения. Т.е. в реализациях с разными механизмами гарантирована в лучшем случае утечка памяти.
Вообще советую new использовать для объектов (тем более, что он вызывает конструктор) и массивов переменных, а malloc/calloc - для обычных данных (графика, например, или буфер - в общем, не переменные).

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #201 : 19 Март 2011, 23:51:08 »
А когда я делаю конструктор для инициализации элемента класса элементом другого класса (композиция) то получается я обязан делать и конструктор по умолчанию (хотя бы пустой ничего не делающий с {}) иначе в main я не смогу создать новый объект моего класса не передавая ничего, ну не смогу написать:
myclass a;
почему так? Ведь не делай я конструктор на случай если я потом захочу присвоить объекту myclass a значение другого класса то я спокойно могу сделать в main
myclass a;
и никаких пустых конструкторов по умолчанию при этом делать не надо, почему так? Опять стандарт?
Собственно пример если я непонятно выразился (пример из конспекта преподши, просто решил переделать от скуки чтобы можно было инициализировать объект одного класса значениями другого, сам пример изначально наоборот демонстрировал что этого делать нельзя  :) ) :
#include<iostream>
using namespace std;
class myclass
{
public:
int a,b;
void set(int i, int j){a = i;b=j;}
void show() { cout<< a <<' ' << b << "\n"; }
};
class yourclass
{
int a,b;
public:
void set(int i, int j){a = i;b=j;}
yourclass(){};                                         //Без этого не получиться создать в main yourclass o2 не передавая параметров в скобках
yourclass(myclass &abc) {a=abc.a;b=abc.b;}
void show() { cout<< a <<' '<< b << "\n"; }
};
int main()
{
myclass o1; yourclass o2;
o1.set(10,4);
o2=o1;
o1.show();
o2.show();
return 0;
}
Все мелочи неточности и что нежелательно делать в этом примере, а было сделано давайте опустим  :)

Добавлено позже:
Ну и заодно вопрос: можно ли объявить другом (friend) класса другой класс подскажите пожалуйста? Ну на случай что мне надо будет чтобы функции одного класса могли обращаться к приватным данным другого класса, я так догадываюсь это вполне реально ведь :) Я ведь пока знаю только как объявить функцию-друга класса только если эта функция будет за границей классов вообще.

Добавлено позже:
Вопрос N3: у преподши повсюду идёт проверка что память через malloc/new была выделена, это пережитки прошлого (когда оп было мало) чтоль или это хороший тон, хотя на последнее не очень то похоже. Это если бы я выделял память в большом объёме тогда ладно, но когда массив из 10 int объектов что не займёт много памяти то по-моему эта проверка лишняя ... или нет?

Оффлайн HoRRoR

  • Пользователь
  • Сообщений: 983
  • Пол: Мужской
  • Ромхакер
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #202 : 20 Март 2011, 00:57:46 »
Цитата
почему так?
Потому что если не описывать ни одного конструктора, то он будет создан автоматически - с пустым телом и без параметров, называется конструктор по умолчанию. А иначе ты сам описываешь конструкторы и можешь создавать объекты только с существующими конструкторами. Т.е. при наличии хоть одного конструктора не будет создаваться пустой конструктор по умолчанию.

Цитата
можно ли объявить другом (friend) класса другой класс подскажите пожалуйста?
А что мешало тебе проверить? Написать внутри класса friend class MyClass? Конечно можно.

Цитата
Вопрос N3
Поясни, я о такой проверке не слышал, не приходилось использовать.
А разницы в объёме нет - хоть один байт, хоть гигабайт - это выделенный блок памяти, так что не лишняя. Лишняя она если ты знаешь, где какой метод выделения памяти ты используешь и у тебя гарантированно не случается накладок.
« Последнее редактирование: 20 Март 2011, 01:23:18 от HoRRoR »

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #203 : 20 Март 2011, 02:04:30 »
Цитата: HoRRoR
Т.е. при наличии хоть одного конструктора не будет создаваться пустой конструктор по умолчанию.
Ага, теперь понятно.
Цитата: HoRRoR
А что мешало тебе проверить? Написать внутри класса friend class MyClass? Конечно можно.
Да ничего не мешало, не знал я как это сделать, пробовал писать просто friend MyClass, а компилятор сказал что так нельзя ну я и решил спросить. Теперь понятно, спасибо за ответ  :)
Цитата: HoRRoR
оясни, я о такой проверке не слышал, не приходилось использовать.
Ну у неё всюду
p=new char[1];
if(!p) {cout << "Ошибка выделения памяти \n"; exit(1);}
Помоему задолбаться можно это приписывать при каждом выделении памяти.

Добавлено позже:
Вопрос на засыпку: а как удалить структуру (ну что мне писать в деструкторе в классе) ?
Есть вот такая структура в классе  и вот мой деструктор, который тоже в классе:
    struct PRICE
    {
        char name[30];// название товара
        char shop[30];//;// название магазина
        double cost;// цена товара
    };
    PRICE abc;

    ~Test()
    {
        cout<<"Дестуктор был запущен";
        delete abc.cost;
        delete abc.name;
        delete abc.shop;
    }
Я так понимаю это я плохо придумал, но просто удалить структуру не получается (ну оно и не удивительно  :) ), а если пробовать удалять по кускам то double элемент структуры удаляться не хочет с ошибкой:
||In destructor `Test::~Test()':|
|27|error: type `double' argument given to `delete', expected pointer|
Так всё же как в таких случаях поступать?

Оффлайн HoRRoR

  • Пользователь
  • Сообщений: 983
  • Пол: Мужской
  • Ромхакер
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #204 : 20 Март 2011, 12:03:37 »
Цитата
Ну у неё всюду
Тю блин, ты про это... Я думал, ты про проверку, выделена память через new или через malloc. Честно - я никогда не использую, но вообще осторожность лишней не бывает.

Цитата
Вопрос на засыпку: а как удалить структуру (ну что мне писать в деструкторе в классе) ?
Эээ... А ничего, что удалять можно только выделенные блоки памяти? о_О Причём только через указатель, полученный при выделении. А ты пытаешься кусок памяти внутри выделенного куска (и то при условии, что объект Test у тебя создаётся через new), да ещё и передавая не указатели, а переменные о_О Вообще глупость, в общем... Чтобы удалить структуру, ты сперва должен её создать сам.

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #205 : 20 Март 2011, 12:32:29 »
HoRRoR,ну у меня тут по умолчанию вместе с классом всегда создаётся и структура abc (PRICE abc) под которую и выделяется там место - два массива по 30 элементов и один элемет double, допустим что их инициализацию мы тоже провели и её то (структуру) теперь и надо удалить так как больше из данных класс ничего не имеет, ну static элементы есть, но они общие. Как мне поступить посоветуй. Я понял что я пробую глупо её удалить, но как тогда иначе поступить?
« Последнее редактирование: 20 Март 2011, 12:34:50 от gepar »

Оффлайн HoRRoR

  • Пользователь
  • Сообщений: 983
  • Пол: Мужской
  • Ромхакер
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #206 : 20 Март 2011, 12:45:44 »
Зачем тебе её удалять? В чём смысл? При удалении объекта класса она сама удалится. В твоём примере ты пытаешься удалить её в деструкторе, что вообще лишено смысла - после деструктора она сама удалится.
А если уж действительно накладно её хранить - то создавай и удаляй её сам:
PRICE *abc;
Test()
{
    abc = new PRICE;
}
void foo()
{
    ...
    delete abc;
    ...
}

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #207 : 20 Март 2011, 12:57:12 »
HoRRoR,а я с самого начала так попробовал, пишет
\7\4.cpp||In destructor `Test::~Test()':|
\7\4.cpp|27|error: type `struct Test::PRICE' argument given to `delete', expected pointer|
У меня же сейчас опять же таки важно не то чтобы это было красиво /логично/удобно, а то чтобы в программе был деструктор  :)
Это как и с той же структурой запихнутой в класс - непонятно зачем, но надо. Вот и здесь так, я там дальше тоже извращался с конструктором по умолчанию чтобы он хоть что-то делал лишь бы он был.
На всякий случай код программы полностью:
//Программа создаёт структру, запрашивает данные для её заполнения после
//чего производит поиск по структуре введённых данных

# include <iostream>
# include <iomanip>
# include <windows.h>
using namespace std;

const int size=3;

class Test
{
public:
    Test()
    {
        numberOfClass++;
    }

    Test(Test &right)
    {
        abc=right.abc;
    }

    ~Test()
    {
        cout<<"Дестуктор был запущен";
        delete abc;
    }

    void setName(char a[])
    {
        strcpy(abc.name,a);
    }

    void setShop(char a[])
    {
        strcpy(abc.shop,a);
    }

    char *getShop()
    {
        return abc.shop;
    }

    void setCost(double a)
    {
        if (a>0)
         abc.cost=a;
        else
        {
            cout<<"Введена направильная цена, цена установлена в 1\n";
            abc.cost=1;
        }
    }


    void search(char a[]) // Ищет есть ли в структуре элементы с нужным нам именем
    {
        if (!(strcmp(a,abc.name)))
        {
            cout<<"Нужный вам товар есть в магазине  "<<abc.shop
            <<"\nЕго цена составляет: "<<abc.cost<<" грн"<<"\n\n";
            resultOfSeach=1;
        };
    }

    static int searchs()
    {
        return resultOfSeach;//Возвращает результат поисков
    }

    static int numberOfClass;
private:
    struct PRICE
    {
        char name[30];// название товара
        char shop[30];//;// название магазина
        double cost;// цена товара
    };
    PRICE abc;
    static int resultOfSeach;// Нужна чтобы знать был ли найден товар для хоть одного класса
};

int Test::resultOfSeach=0;
int Test::numberOfClass=0;


int main()
{
    setlocale(LC_ALL, "Russian");
    char search[30];
    char temp[30];
    int result=0;
    double cost;
    int n;
    cout<<"Введите колличество магазинов: ";
    cin>>n;
    Test *a=new Test [n];
    for (int i=0;i<n;i++)
    {
        cout<<"-----Магазин N"<<i+1<<"-----\n";
        cout<<"Введите название товара: ";
        cin>>temp;
        a[i].setName(temp);
        cout<<"Введите название магазина:";
        cin>>temp;
        a[i].setShop(temp);
        cout<<"Введите цену товара :";
        cin>>cost;
        a[i].setCost(cost);
    }
    cout<<"\nВведите имя интересущего вас товара: ";
    cin>>search;
    for (int i=0;i<n;i++)
     a[i].search(search);
    if (!(a[0].searchs()))
     cout<<"Указанный товар в магазинах не найден\n";
    Test b=a[0];
    delete a;
    cout<<"\nКонструктор копии работает и мы можем увидеть название магазина N1\nдаже после удаления оригинала a: "<<b.getShop()<<'\n';
    cout<<"Всего было магазинов: "<<Test::numberOfClass<<'\n';
    system("pause");
    return EXIT_SUCCESS;
}
Вообще можешь и не читать полнсотью, надо только чтобы деструктор удалил саму структуру.

Оффлайн HoRRoR

  • Пользователь
  • Сообщений: 983
  • Пол: Мужской
  • Ромхакер
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #208 : 20 Март 2011, 13:00:06 »
Цитата
HoRRoR,а я с самого начала так попробовал, пишет
Перечитай ещё раз мой код и вчитайся в текст ошибки. Ты не так пробовал.

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

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #209 : 20 Март 2011, 13:50:14 »
HoRRoR,перечитал и всё равно не могу уловить твою идею. Ну пытаюсь сделать конструктор как у тебя и тогда получаю
\7\4.cpp||In constructor `Test::Test()':|
\7\4.cpp|16|error: no match for 'operator=' in '((Test*)this)->Test::abc = (Test::PRICE*)operator new(72u)'|
\7\4.cpp|77|note: candidates are: Test::PRICE& Test::PRICE::operator=(const Test::PRICE&)|
Какая-то страшная ошибка.