Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> массив указателей на фунцию в объявлении класса, не разобраться, где ошибка 
:(
    Опции темы
redwhite90
Дата 6.2.2012, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 332
Регистрация: 14.7.2011

Репутация: нет
Всего: нет



вот хидер
Код

# ifndef COMBINATION_H
# define COMBINATION_H

#include "card.h" 
using namespace std;

const int Number_card_in_combination=7;

class combination
{
    public:
        combination (struct card[]);
    private:
        card card_looking[7];
        void sort();
        int best_card_value();
        int pair();
        int pair_double();
        int set();
        int straight();
        int flush();
        int full_house();
        int four_of_kind();
        int straight_flush();
        int royal_flush();
        int (*mas_of_comb[9])() = {royal_flush,straight_flush,four_of_kind,full_house,flush,straight,set,pair_double,pair};
        
};

# endif


ругается на эту строчку:
Код

int (*mas_of_comb[9])() = {royal_flush,straight_flush,four_of_kind,full_house,flush,straight,set,pair_double,pair};

пишет:
Код

1>c:\users\redwhite\documents\visual studio 2010\projects\poker_calc_05_01_2012_21_00\combination.h(26): error C2059: syntax error : '{'
1>c:\users\redwhite\documents\visual studio 2010\projects\poker_calc_05_01_2012_21_00\combination.h(26): error C2334: unexpected token(s) preceding '{'; skipping apparent function body


не понимаю в чём беда.
PM MAIL   Вверх
boostcoder
Дата 6.2.2012, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



во первых - ты разделом ошибся.
во вторых - 
Цитата(redwhite90 @  6.2.2012,  20:41 Найти цитируемый пост)
int (*mas_of_comb[9])

ты пытаешься создать массив указателей на функции, а инициализируешь его указателями на методы.

в третьих - так инициализировать нельзя, если твой компилятор не поддерживает non static members initializers:
Цитата(redwhite90 @  6.2.2012,  20:41 Найти цитируемый пост)
int (*mas_of_comb[9])() = {royal_flush,straight_flush,four_of_kind,full_house,flush,straight,set,pair_double,pair};


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

Код

#include <iostream>

struct type {
   type()
      :mptr({&type::method1}) {}

   int method1()
   {std::cout << "Hello from method1()" << std::endl;}

   typedef int(type::*method_ptr)();
   
   method_ptr mptr[9];
};

int main() {
   type t;
   (t.*(t.mptr[0]))();
}


http://liveworkspace.org/code/36c1768c55ee...b4175d09e5d8659

PM WWW   Вверх
redwhite90
Дата 6.2.2012, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 332
Регистрация: 14.7.2011

Репутация: нет
Всего: нет



да, ошибся, правда - перенесите пожалста.
вот так то ведь работает:
Код

# include <iostream>
using namespace std;
int f1()
{
    cout << "f1" << endl;
    return 1;
}
int f2()
{
    cout << "f2" << endl;
    return 1;
}
int main()
{
    int (*ptr[2])()={f1,f2};
    ptr[0]=f1;
    ptr[1]=f2;
    ptr[0]();
    ptr[1]();
    return 0;
}


visual studio 2010 поддерживает?

Добавлено через 1 минуту и 49 секунд
Код

 typedef int(type::*method_ptr)();
   
   method_ptr mptr[9];


можете пояснить эти строки?
PM MAIL   Вверх
boostcoder
Дата 6.2.2012, 21:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



инициализация_массива, и инициализация_массива_члена_класса - ни о чем не говорят? ;)

Добавлено через 41 секунду
или что ты этим кодом хотел сказать?

Добавлено через 2 минуты и 6 секунд
тайпдеф method_ptr как тип указателя на методы класса type.
и декларация массива этих указателей.
PM WWW   Вверх
redwhite90
Дата 6.2.2012, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 332
Регистрация: 14.7.2011

Репутация: нет
Всего: нет



Цитата(boostcoder @  6.2.2012,  21:09 Найти цитируемый пост)
ты пытаешься создать массив указателей на функции, а инициализируешь его указателями на методы.

я думал это одно и тоже.

Цитата(boostcoder @  6.2.2012,  21:23 Найти цитируемый пост)
или что ты этим кодом хотел сказать?

как я представляю вызов методов

Добавлено через 1 минуту и 21 секунду
Цитата(boostcoder @  6.2.2012,  21:23 Найти цитируемый пост)
инициализация_массива, и инициализация_массива_члена_класса - ни о чем не говорят? ;)

говорят

Добавлено через 4 минуты и 14 секунд
а моя VS ругается на ваш код:
Код

#include <iostream>

struct type {
    type()
        :mptr({&type::method1}) {}

    int method1()
    {std::cout << "Hello from method1()" << std::endl;}

    typedef int(type::*method_ptr)();

    method_ptr mptr[9];
};

int main() {
    type t;
    (t.*(t.mptr[0]))();
}


Код

1>c:\users\redwhite\documents\visual studio 2010\projects\test_указатели_на_функции\1.cpp(4): error C2143: syntax error : missing ')' before '{'
1>c:\users\redwhite\documents\visual studio 2010\projects\test_указатели_на_функции\1.cpp(4): warning C4351: new behavior: elements of array 'type::mptr' will be default initialized
1>c:\users\redwhite\documents\visual studio 2010\projects\test_указатели_на_функции\1.cpp(4): error C2143: syntax error : missing ';' before '}'
1>c:\users\redwhite\documents\visual studio 2010\projects\test_указатели_на_функции\1.cpp(4): error C2059: syntax error : ')'
1>c:\users\redwhite\documents\visual studio 2010\projects\test_указатели_на_функции\1.cpp(4): error C2447: '{' : missing function header (old-style formal list?)
1>

PM MAIL   Вверх
boostcoder
Дата 6.2.2012, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(redwhite90 @  6.2.2012,  21:34 Найти цитируемый пост)
я думал это одно и тоже.

нет же.
у методов есть скрытый адрес вызова (this), и метод нельзя вызвать без объекта к которому он принадлежит.

Цитата(redwhite90 @  6.2.2012,  21:34 Найти цитируемый пост)
как я представляю вызов методов

это вызов функций, но не методов.

Добавлено через 2 минуты и 6 секунд
ругается из-за этого -
Цитата(redwhite90 @  6.2.2012,  21:34 Найти цитируемый пост)
:mptr({&type::method1})

extended initializer (braces initializer). студия не поддерживает это.

зы
почему не сменишь компилятор на что-то более перспективное? gcc/MinGW к примеру.
PM WWW   Вверх
redwhite90
Дата 6.2.2012, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 332
Регистрация: 14.7.2011

Репутация: нет
Всего: нет



Цитата(boostcoder @  6.2.2012,  21:40 Найти цитируемый пост)
почему не сменишь компилятор на что-то более перспективное? gcc/MinGW к примеру.


это ж под линуксом наверное?
PM MAIL   Вверх
boostcoder
Дата 6.2.2012, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



GCC под линуксом.
MinGW под вендой. вот же: http://forum.vingrad.ru/forum/topic-345601.html
PM WWW   Вверх
redwhite90
Дата 6.2.2012, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 332
Регистрация: 14.7.2011

Репутация: нет
Всего: нет



спасибо, буду иметь ввиду)

а там уж как нить и без массива обойдусь пожалуй

Добавлено через 27 секунд
спасибо, буду иметь ввиду)

а там уж как нить и без массива обойдусь пожалуй
PM MAIL   Вверх
boostcoder
Дата 6.2.2012, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



для спасибоф есть соответствующие кнопки ;)
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0996 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.