Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.12.2014, 12:08   #1
Otar4ik
Форумчанин
 
Регистрация: 16.04.2010
Сообщений: 123
По умолчанию Разработка средства архивации

Подскажите пожалуйста как вызвать методы из класса CompressLZW в классе Menu?
То есть мои методы класса должны при нажатии соответствующей цифры выполнять действия.

Не могу понять ошибку,ссылку на класс сделал,даже меню не запускается.

Код тут не вмещается,выложил в txt документе.
Вложения
Тип файла: txt Progra.txt (6.8 Кб, 144 просмотров)
Otar4ik вне форума Ответить с цитированием
Старый 14.12.2014, 14:00   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
Menu Menu::vibr_punkt()
{
    int item;
    CompressLZW* m3=new CompressLZW();
    cout << "Выбрать пункт меню:" << endl;
    cout << "1 - Compress\n2 - Expand\n3 - exit" << endl;
    cin >> item;
    switch (item)
    {
    case 1:
        system("cls");
       m3->compress;
    case 2:
        system("cls");
        m3->expand;
    case 3:
        delete m3;
        exit(EXIT_SUCCESS);
    default:
        cout << "Ошибка в вводе,попробуйте ещё:\n";
        return vibr_punkt();
    }
}
Годится?
Цитата:
даже меню не запускается.
Впервые вижу такую схему: &Menu::vibr_punkt;
Может так в Си нельзя?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.12.2014, 16:38   #3
Otar4ik
Форумчанин
 
Регистрация: 16.04.2010
Сообщений: 123
По умолчанию

Спасибо вам,только он ругается на эти строки

я исправлял только

Цитата:
m3->compress;---Ошибка 2 error C3867: CompressLZW::compress: в вызове функции отсутствует список аргументов; используйте "&CompressLZW::compress" для создания указателя на член

m3->expand;-Ошибка 3 error C3867: CompressLZW::expand: в вызове функции отсутствует список аргументов; используйте "&CompressLZW::expand" для создания указателя на член
Исправляю,а там уже снова на синтаксис ругается..

Последний раз редактировалось Stilet; 14.12.2014 в 18:13.
Otar4ik вне форума Ответить с цитированием
Старый 14.12.2014, 17:59   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Так че сидим? Кого ждем?
В коде ясно написано:
Цитата:
void compress(FILE *input,FILE *output)
Передавай параметры.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.12.2014, 18:00   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Так че сидим? Кого ждем?
В коде ясно написано:
Цитата:
void compress(FILE *input,FILE *output)
Передавай параметры.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.12.2014, 20:42   #6
Otar4ik
Форумчанин
 
Регистрация: 16.04.2010
Сообщений: 123
По умолчанию

Передал но не нравится,как я помню мы передаём уже по ссылке наши параметры чтобы их вызвать в другом классе,то есть работаем напрямую.Ругается на те же функции и на меню

П.С-пишу на 2012-ой студии

Код:
Menu Menu::vibr_punkt()
{
    int item;
	FILE a,b;
    CompressLZW* m3=new CompressLZW();
    cout << "Выбрать пункт меню:" << endl;
    cout << "1 - Compress\n2 - Expand\n3 - exit" << endl;
    cin >> item;
    switch (item)
    {
    case 1:
        system("cls");
       m3->compress(&input ,&output);
    case 2:
        system("cls");
        m3->expand(&input ,&output);
    case 3:
        delete m3;
        exit(EXIT_SUCCESS);
    default:
        cout << "Ошибка в вводе,попробуйте ещё:\n";
        return vibr_punkt();
    }
}


int _tmain(int argc, _TCHAR* argv[])
{
	setlocale(LC_ALL,"Russian");
	Menu m;
	Menu::vibr_punkt;
-----Ошибка-error C3867: Menu::vibr_punkt: в вызове функции отсутствует список аргументов; используйте
 "&Menu::vibr_punkt" для создания указателя на член
	system("pause");
	return 0;
}

Последний раз редактировалось Stilet; 14.12.2014 в 21:02.
Otar4ik вне форума Ответить с цитированием
Старый 14.12.2014, 21:04   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Может тебе всетки стоит почитать книгу по азам ООП в Си?
Или просто скажи: Хей, ботаны, мну песать за меня! Фас!.
И все. Дело в шляпе )
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.12.2014, 21:22   #8
Otar4ik
Форумчанин
 
Регистрация: 16.04.2010
Сообщений: 123
По умолчанию

Я сам пытаюсь)Книги читал,Шилдта например)
Но в этом случае я не могу понять,что же передать,ладно был бы тип int но здесь я в файл записываю)
Otar4ik вне форума Ответить с цитированием
Старый 14.12.2014, 21:50   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ох...
Слушай, без обид но тебе рано браться за архиваторы. Тебе азы нужно подтягивать.
Если взять твой код, то там куча лагов, не ты его писал это понятно.
Поэтому забудь про внутренности, отработай саму физику ООП.
Просто попытайся понять как устроены классы и объекты в плюсах, а уже потом будешь и за более сложные задачи браться.
Код:
#include <iostream>
#include <stdio.h>


using namespace std;


class CompressLZW
    {
    public:
        int find_match(int hash_prefix,unsigned int hash_character)
        {
            cout<<"find_match(int hash_prefix,unsigned int hash_character)";
        }

        char *decode_string(unsigned char *buffer,unsigned int code)
        {
          cout<<"decode_string(unsigned char *buffer,unsigned int code)";
        }
    public:

        int input_code(FILE *input)
        {
          cout<<"input_code(FILE *input)";
        }
        void output_code(FILE *output,unsigned int code)        {
            cout<<"void output_code(FILE *output,unsigned int code)";
        }
        void compress(FILE *input,FILE *output)
        {
            cout<<"void compress(FILE *input,FILE *output)";
        }

void expand(FILE *input,FILE *output)
        {
            cout<<"void expand(FILE *input,FILE *output)";
        };
    };
class Menu
{
public:
    Menu()
    {

    }
    int vibr_punkt();
    ~Menu()
    {

    }
private:
};

int Menu::vibr_punkt()
{
    int item;
    FILE *input,*output;
    CompressLZW m3;
    cout << "Выбрать пункт меню:" << endl;
    cout << "1 - Compress\n2 - Expand\n3 - exit" << endl;
    cin >> item;
    switch (item)
    {
    case 1:
        m3.compress(input,output);
        fclose(input) ;
        fclose(output) ;
        break;
    case 2:
        m3.expand(input,output);
        fclose(input) ;
        fclose(output) ;
        break;
    case 3:
        return 0;
    default:
        cout << "Ошибка в вводе,попробуйте ещё:\n";
        return vibr_punkt();
    }
}

int main()
{
    setlocale(LC_ALL,"Russian");
    Menu m;
    m.vibr_punkt();

    return 0;
}
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.12.2014, 12:52   #10
Otar4ik
Форумчанин
 
Регистрация: 16.04.2010
Сообщений: 123
По умолчанию

Выскакивала ошибка ошибка the variable 'input' is being used without being initialized и ошибка the variable 'otput' is being used without being initialized

Прочёл про указатели,инициализировал,сделал указатель на указатель,уже получше но возникала другая ошибка(в рисунке ниже)

При вызове Compress вот на что указывает,а на 2-ом рисунке он вообще не на код указывает в другой спп-шный файл.

Код:
void compress(FILE **input,FILE **output)
		{
			unsigned int next_code;
			unsigned int character;
			unsigned int string_code;
			unsigned int index;
			int i;
			next_code=256;							
for (i=0;i<TABLE_SIZE;i++)	
				code_value[i]=-1;------------------Вот здесь ругается
			i=0;
			printf("Compressing...\n");
			string_code=getc(*input);  
			while ((character=getc(*input)) != (unsigned)EOF) 
			{
				if (++i==1000)            
				{                         
					i=0;                  
					printf("*");
				}
			
				index = find_match(string_code,character);					if (code_value[index] != -1)									string_code=code_value[index];			
				else										
				{											
					if (next_code <= MAX_CODE)
								{
						code_value[index]=next_code++;
						prefix_code[index]=string_code;
						append_character[index]=character;
					}
					output_code(output,string_code);
					string_code=character;          
				}									
			}									

			output_code(output,string_code);  
			output_code(output,MAX_VALUE);    
			output_code(output,0);            
			printf("\n");
		}
Весь код тоже прикрепил

Да я не обижаюсь,да писал не я,программа работала преподаватель сказал что надо изменить то и это..И началась практика по программированию,где надо хватать на лету чтобы поскорее сдать курсач))
Изображения
Тип файла: jpg На форум.jpg (81.1 Кб, 134 просмотров)
Тип файла: jpg НаФОрум2.jpg (72.6 Кб, 134 просмотров)
Вложения
Тип файла: txt Proga.txt (5.1 Кб, 137 просмотров)
Otar4ik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
системные средства -=Andriushka=- Помощь студентам 5 03.01.2014 19:10
Средства OLAP anevgeniy69 Microsoft Office Excel 0 14.11.2012 14:24
Разработчикам. Программа для архивации билдов проектов (Build version). Edd Софт 4 25.05.2011 17:57
Не могу найти компоненты для архивации потоков TStream kir86975 Общие вопросы Delphi 5 31.03.2010 08:44
выставить расписание для архивации и отправки на e-mail cyberguru Операционные системы общие вопросы 4 28.08.2008 11:32