1

Тема: Незрозуміла помилка при компіляції

Усім привіт. Не знайшов схожої теми. Я тільки всі С++, і дуже часто, а точніше з дивовижною постійністю отримую різного роду помилки при компіляції своїх проектів, от і ствоив тему може знаючі люди допоможуть. Якщо тему не потруть то буду тут питатись. Сьогодні отримав от таку помилку:
error C2276: '&' : illegal operation on bound member function expression.
а ось код:

Прихований текст

Ork[0] = new Sprites(sdl_setup->GetRenderer(), "DATA/peon.png", 276, 258, 60, 60);

cout << &Ork[0]->GetX << ' '; //error C2276: '&' : illegal operation on bound member function expression.
cout << &Ork[0]->GetY << ' ';//error C2276: '&' : illegal operation on bound member function expression.
cout << Food->x << ' ';
cout << Food->y << ' ';
cout << Ork_Body->x << ' ';
cout << Ork_Body->y << ' ' << endl;

а якщо так :

Прихований текст

cout << Ork[0]->GetX << ' ';//error C3867: 'Sprites::GetX': function call missing argument list; use                                                                   '&Sprites::GetX' to create a pointer to member
cout << Ork[0]->GetY << ' ';//error C3867: 'Sprites::GetX': function call missing argument list; use '&Sprites::GetX' to create a pointer to member
cout << Food->x << ' ';
cout << Food->y << ' ';
cout << Ork_Body->x << ' ';
cout << Ork_Body->y << ' ' << endl;

2

Re: Незрозуміла помилка при компіляції

Цяцьку якусь пиляєте?

Чисто здогад: GetX — це ж функція, а не поле?

Подякували: koala, StoBF2

3

Re: Незрозуміла помилка при компіляції

а так?

cout << (&Ork[0])->GetX << ' ';
Подякували: StoBF1

4

Re: Незрозуміла помилка при компіляції

Ork[0] = new Sprites(

Ork[0] - це вказівник (до речі, якби визначення Ork написали, це було б очевидніше). Що таке &Ork[0]? Адреса вказівника?

Ork[0]->GetX << ' ';//error C3867: 'Sprites::GetX': function call missing argument list  


Вам же кажуть - списку параметрів нема, тобто

Ork[0]->GetX()
Подякували: StoBF1

5

Re: Незрозуміла помилка при компіляції

Це функції для доступу до закритих полів класу SDL_Rect

class Sprites
{
private:
    SDL_Texture* image;
    [b]SDL_Rect rect;[/b]
    SDL_Rect anim;
    SDL_Renderer* render;
    int img_width;
    int img_height;
    int CurentFrame;
    int animDelay;
    int A_Frame_X;
    int A_Frame_Y;

public:
    int GetX();
    int GetY();
    bool turn;
    bool Invent;
    int StartPosX;
    int StartPosY;
    Sprites(SDL_Renderer* pass_render, std::string FilePath, int x, int y, int w, int h);
    void Draw();
    void PlayAnimation(int BeginF, int EndF, int Row, float Speed);
    void setX(int x);
    void setY(int y);
    void setPosition(int x, int y);
    void setAnimation(int passed_A_X, int passed_A_Y);

    ~Sprites();
};

Функції повинні оримати координати.

6

Re: Незрозуміла помилка при компіляції

koala написав:
Ork[0] = new Sprites(

Ork[0] - це вказівник (до речі, якби визначення Ork написали, це було б очевидніше). Що таке &Ork[0]? Адреса вказівника?

Ork[0]->GetX << ' ';//error C3867: 'Sprites::GetX': function call missing argument list  


Вам же кажуть - списку параметрів нема, тобто

Ork[0]->GetX()

Голосно дякую! працює, навіть не знав що так можна.

7 Востаннє редагувалося koala (11.11.2014 00:03:40)

Re: Незрозуміла помилка при компіляції

StoBF написав:

Голосно дякую! працює, навіть не знав що так можна.

Дайте здогадаюся: ви вчили паскаль, і тепер замість того, щоб почитати підручник з C++, ви почали робити як в паскалі?

8

Re: Незрозуміла помилка при компіляції

koala написав:
StoBF написав:

Голосно дякую! працює, навіть не знав що так можна.

Дайте здогадаюся: ви вчили паскаль, і тепер замість того, щоб почитати підручник з C++, ви почали робити як в паскалі?

Програміст на Фортрані може програмувати на Фортрані на будь-якій мові програмування, ліл.

Подякували: koala, StoBF2

9

Re: Незрозуміла помилка при компіляції

koala написав:
StoBF написав:

Голосно дякую! працює, навіть не знав що так можна.

Дайте здогадаюся: ви вчили паскаль, і тепер замість того, щоб почитати підручник з C++, ви почали робити як в паскалі?

Ні я ніякої мови не вчив зразу на с++, а підручники читати в мене якось не получається можеб варто було але я як тільки сідаю за підручник мені різко починає хотітись спати. Мені якось ростіше побачити один приклад з реалізацією чогось там ніж сісти і прочитати кілька сторінок.

10

Re: Незрозуміла помилка при компіляції

Тоді програмування точно не для вас. Читати стандарти значно нудніше за підручники, де все ж людська мова і поради для новачків є; а стандарти читати доведеться.

11 Востаннє редагувалося StoBF (11.11.2014 10:31:08)

Re: Незрозуміла помилка при компіляції

Те що читати потрібно я згідний як то кажуть книга джероло знань тут я не поспорю. Але от приклад вказівники в книзі їх розмусолили на 4 сторінки,а у  відео уроці на 10 хв. Ну цеж простіше переглянути відео урок щоб зрозуміти принцип дії, ніж 4 сторінки російського тексту з кривим перекладом читати. Веду до того що до книжок я звертаюсь вже в крайоньому випадку. Тай в книжці я навряд чи би знайшов так швидко відповідь на своє питання.
А тут запитав ви зразу і розставили всі крапки над і  :)
А в загальному мені програмування подобається дуже, програмування це як конструктор сиди бався і щось вибудовуй) Як  то кажуть коли Бог всім людям дав руки а мені граблі то тут тільки клавіатура і врятує)

12

Re: Незрозуміла помилка при компіляції

За 10 хвилин я встигну прочитати 5 сторінок в оригіналі, якщо чесно. А обсяг інформації в відео значно менший, що й підтверджується тим, що ви не знаєте, як функції викликати.

13 Востаннє редагувалося StoBF (11.11.2014 10:57:08)

Re: Незрозуміла помилка при компіляції

А якуб ви книжку порекомендували? В мене є: Джесс Либерти - Освой самостоятельно С++ за 21 день, Бьерн Страуструп - Язык программирования С++.
Але незавжди в них вдається знайти відповіді на свої питання.
Може є якась секретна книжка?

14

Re: Незрозуміла помилка при компіляції

Обидві читайте.
Біда в тому, що C++ одразу розрахований на людей, знайомих з кількома парадигмами програмування, тому зазвичай книжки пишуть в стилі "дивіться, як це робиться в C++ і що можна ще із цим зробити", а на питання "а що ми взагалі робимо" відповідей там нема.

15

Re: Незрозуміла помилка при компіляції

І ще, стосовно помилок: C і C++ користуються купою скорочень і багатозначних символів і, як наслідок, маленька помилка може перекрутити сенс виразу у щось зовсім інше (наприклад, < може означати порівняння, зсув і інстанціювання шаблону, залежно від сусідніх символів); тому компілятор часто неправильно "відгадує" ваші наміри і може давати неправильні поради. Конкретно у вашому випадку:

... << Ork[0]->GetX << ...

Компілятор розуміє, що GetX - це функція, але не знає, що ви з нею збиралися робити. Можливо, взяти адресу, можливо, викликати, можливо, щось інше? Тому і пише: оскільки списку аргументів, як треба для виклику функції, нема, можливо, треба було адресу взяти &Ork[0]->GetX? Ну а коли ви спробували це зробити

... << &Ork[0]->GetX << ...

почався вже ад: це не просто функція, а функція-член класу; але ви намагаєтеся взяти не просто адресу цієї функції (правильно &Sprites::GetX), а адресу цієї функції для конкретного екземпляру, тобто результат зв'язування, а оскільки до лямбда-числення ви ще явно не дісталися, то це виглядає для вас якоюсь китайською грамотою...

Подякували: StoBF1

16

Re: Незрозуміла помилка при компіляції

StoBF написав:

А якуб ви книжку порекомендували? В мене є: Джесс Либерти - Освой самостоятельно С++ за 21 день, Бьерн Страуструп - Язык программирования С++.
Але незавжди в них вдається знайти відповіді на свої питання.
Може є якась секретна книжка?

"Бьерн Страуструп - Язык программирования С++" - сама книга класна, але вона дуже складна, а новачкам взагалі протипоказана. Краще її читати вдогонку для поглиблення та розширення знань. Я почав вивчати С++ саме з цієї книги і тому я її не рекомендую :D  На її освоєння я витратив дууууже багато часу, може з рік, це при тому що в мене вже було років 5 - 6 досвіду програмування. Краще почати з Еккеля та Елісона з їхньою "Філософією С++"  в двох томах - досить непогана книга і простішою буде.

Подякували: quez, StoBF2

17

Re: Незрозуміла помилка при компіляції

Arete написав:
StoBF написав:

А якуб ви книжку порекомендували? В мене є: Джесс Либерти - Освой самостоятельно С++ за 21 день, Бьерн Страуструп - Язык программирования С++.
Але незавжди в них вдається знайти відповіді на свої питання.
Може є якась секретна книжка?

"Бьерн Страуструп - Язык программирования С++" - сама книга класна, але вона дуже складна, а новачкам взагалі протипоказана. Краще її читати вдогонку для поглиблення та розширення знань. Я почав вивчати С++ саме з цієї книги і тому я її не рекомендую :D  На її освоєння я витратив дууууже багато часу, може з рік, це при тому що в мене вже було років 5 - 6 досвіду програмування. Краще почати з Еккеля та Елісона з їхньою "Філософією С++"  в двох томах - досить непогана книга і простішою буде.

Таки приєднуюсь. В нас на курсі порада читати Страуструпа була чимось типу легкого тролінгу — жертва читала, злилась, тішачи «порадників».

Подякували: StoBF1

18

Re: Незрозуміла помилка при компіляції

Я плюси вчив по Лафоре Р. Об'єктно-орієнтоване програмування в С++ . В ній досить багато прикладів і пояснено все доступно. До цієї книги пробував читати 5-6 штук інших книг, але не "йшло". Також вроді непогана книга Ліпмана, назву не пам'ятаю

Подякували: StoBF1