1

Тема: помилка з функціонуванням і викликом функції Put()

функція Put () повинна виводити вибрані об'єкти у зворотному порядку, допоможіть виправити це в коді

// stek.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
using namespace std;
const int size=50;
  
   // Створення узагальненого класу queueClass.
template <class qType> class queueClass 
{         qType array[size];
           int sloc, rloc,response,i;
     public:
           queueClass() { sloc = rloc = 0;i=1; }
           void Get(qType c);
           void func(int response);
           qType Put(); // Виведення з об'єкта значення
};

    // Занесення об'єкта в чергу.
template <class qType> void queueClass<qType>::Get(qType c)
{     if(sloc>=size) 
                   { cout << "Стек заповнений" << endl; return; }
       sloc++;
       array[sloc] = c;
}

    // Вилучення об'єкта з черги.
template <class qType> qType queueClass<qType>::Put()
{     if(rloc == i) 
                  { cout << "Стек порожній" << endl; return 0; }
       rloc=i;
       i--;
       cout<<array[rloc];
       return array[rloc];
}
template <class qType> void queueClass<qType>::func(int response)
{
    //cout<<"ghfth"
    
    //while(response<1||response>5);
switch(response) 
    {
    case 1:
        array[i]="Komp";
        for (int k=1;k<=i;k++)
        cout<<array[k]<<" , ";
        //cin>>response;
        //size++;
        i++;
        break;
    case 2:
        cout<<"Flesh"<<endl;
        array[i]="Flesh";
        i++;
        break;
    case 3:
        cout<<"Nout"<<endl;
        array[i]="Nout";
        i++;
        break;
    case 4:
        cout<<"Phone"<<endl;
        array[i]="Phone";
        i ++;
        break;
        
    case 5:
//        return 0;
        //exit (1);
        cout<<Put();
        break;
    }
cout<<endl;

}
    

void main()
{   
    setlocale (LC_ALL,".1251");
    int response;
    int q=1;
    queueClass<char*> ObjA;         // Створюємо дві черги для int-значень.

    cout<<"1.Komp"<<endl
        <<"2.Flesh"<<endl
        <<"3.Nout"<<endl
        <<"4.Phone"<<endl
        <<"5.korzuna"<<endl;
    cout<<"Vvedin № tovaru: "<<endl;
    cin>>response;

    while(response!=5)

    {ObjA.func(response); cin>>response;}
    ObjA.Put();

  system("pause");
}

2

Re: помилка з функціонуванням і викликом функції Put()

Варто би визначитися, що все-таки вимагається від Put(): виведення чи повернення чергового елемента, бо суміщати їх не має сенсу.

І взагалі, Put() мало би означати "запхати в чергу", а Get() - "витягти з черги", але то таке.

3

Re: помилка з функціонуванням і викликом функції Put()

ну це я експерементував просто, виведення можна закоментувати, але проблема залишається та ж

4

Re: помилка з функціонуванням і викликом функції Put()

Якщо ви прагнете вивести чергу у методі Put(), то можна зробити так:

    // Вилучення об'єкта з черги.
template <class qType> void queueClass<qType>::Put()
{     if(rloc == i) 
                  { cout << "Стек порожній" << endl; return 0; }
       for(int item = size-1; item>=0; item--)
           cout<<array[item]<<endl;
}

5

Re: помилка з функціонуванням і викликом функції Put()

ось що видає коли вставляю це в код

c:\users\igor\documents\visual studio 2010\projects\stek\stek\stek.cpp(34): error C2244: 'queueClass<qType>::Put' : unable to match function definition to an existing declaration
1>          c:\users\igor\documents\visual studio 2010\projects\stek\stek\stek.cpp(17) : see declaration of 'queueClass<qType>::Put'
1>          definition
1>          'void queueClass<qType>::Put(void)'
1>          existing declarations
1>          'qType queueClass<qType>::Put(void)'

6

Re: помилка з функціонуванням і викликом функції Put()

template <class qType> queueClass<qType>::Put()
{ if(rloc == i)
{ cout << "Стек порожній" << endl; return 0; }
for(int item = size-1; item>=0; item--)
cout<<array[item]<<endl;
}

А так?

7

Re: помилка з функціонуванням і викликом функції Put()

а так ось шо
c:\users\igor\documents\visual studio 2010\projects\stek\stek\stek.cpp(34): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

8

Re: помилка з функціонуванням і викликом функції Put()

z.igor.9v написав:

ось що видає коли вставляю це в код

c:\users\igor\documents\visual studio 2010\projects\stek\stek\stek.cpp(34): error C2244: 'queueClass<qType>::Put' : unable to match function definition to an existing declaration
1>          c:\users\igor\documents\visual studio 2010\projects\stek\stek\stek.cpp(17) : see declaration of 'queueClass<qType>::Put'
1>          definition
1>          'void queueClass<qType>::Put(void)'
1>          existing declarations
1>          'qType queueClass<qType>::Put(void)'

Я підкидав реалізацію, а у вас у класі ще декларація цього методу присутня. Порівняйте: по ходу, у вас вони розходяться.

9

Re: помилка з функціонуванням і викликом функції Put()

ну я коротше виправив цю помилку шо виникала з цьою написаною вами часткою коду, але сама програма не працює при її використанні, а на томість аварійно завершує робоу, ось я даю код вже зі вставленою новою функцією Put(), можете переконатись і можливо вирішити цю проблему

// stek.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
using namespace std;
const int size=50;
  
   // Створення узагальненого класу queueClass.
template <class qType> class queueClass 
{         qType array[size];
           int sloc, rloc,response,i;
     public:
           queueClass() { sloc = rloc = 0;i=1; }
           void Get(qType c);
           void func(int response);
           qType Put(); // Виведення з об'єкта значення
};

    // Занесення об'єкта в чергу.
template <class qType> void queueClass<qType>::Get(qType c)
{     if(sloc>=size) 
                   { cout << "Стек заповнений" << endl; return; }
       sloc++;
       array[sloc] = c;
}

    // Вилучення об'єкта з черги.
template <class qType> qType queueClass<qType>::Put()
{ if(rloc == i)
{ cout << "Стек порожній" << endl; return 0; }
for(int item = size-1; item>=0; item--)
cout<<array[item]<<endl;
}
template <class qType> void queueClass<qType>::func(int response)
{
    //cout<<"ghfth"
    
    //while(response<1||response>5);
switch(response) 
    {
    case 1:
        array[i]="Komp";
        for (int k=1;k<=i;k++)
        cout<<array[k]<<" , ";
        i++;
        break;
    case 2:
        array[i]="Flash";
        for (int k=1;k<=i;k++)
        cout<<array[k]<<" , ";
        i++;
        break;
    case 3:
        array[i]="Nout";
        for (int k=1;k<=i;k++)
        cout<<array[k]<<" , ";
        i++;
        break;
    case 4:
        array[i]="Phone";
        for (int k=1;k<=i;k++)
        cout<<array[k]<<" , ";
        i++;
        break;
        
    case 5:
//        return 0;
        //exit (1);
        cout<<Put();
        break;
    }
cout<<endl;

}
    

void main()
{   
    setlocale (LC_ALL,".1251");
    int response;
    int q=1;
    queueClass<char*> ObjA;         // Створюємо дві черги для int-значень.
     // ObjA.Get("hjk");
    //  ObjA.Get("20");
      //ObjA.Get("30");
    //int response;
    {

    cout<<"1.Komp"<<endl
        <<"2.Flesh"<<endl
        <<"3.Nout"<<endl
        <<"4.Phone"<<endl
        <<"5.korzuna"<<endl;
    cout<<"Vvedin № tovaru: "<<endl;
    cin>>response;
    }
    while(response!=5)

    {ObjA.func(response); cin>>response;}
    ObjA.Put();
    /*  top:
      cout<<"Vvedin № tovaru: "<<endl;
      cin>>response;
      ObjA.func(response);
      cout<<"Vvedin № tovaru: "<<endl;
      cin>>response;
      ObjA.func(response);
      cout<<"Vvedin № tovaru: "<<endl;
      cin>>response;
      ObjA.func(response);
      cout<<"Dlya prodovzennya vubory nasnit `q`"<<endl;
      cin>>q;
      if (q=1)
          goto top;*/

    /*  cout << ObjA.Put() << " "<<endl;
       cout << ObjA.Put() << " "<<endl;
      cout << ObjA.Put() << " "<<endl;
  system("pause");*/
}

10

Re: помилка з функціонуванням і викликом функції Put()

Код плутає думки...

Мало так бути?
//#include "stdafx.h"
#include <iostream>
using namespace std;
const int size=50;
  
   // Створення узагальненого класу queueClass.
template <class qType> class queueClass 
{         qType array[size];
           int sloc, rloc,response,i;
     public:
           queueClass() { sloc = rloc = 0;i=1; }
           void Get(qType c);
           void func(int response);
           qType Put(); // Виведення з об'єкта значення
};
 
    // Занесення об'єкта в чергу.
template <class qType> void queueClass<qType>::Get(qType c)
{     if(sloc>=size) 
                   { cout << "Стек заповнений" << endl; return; }
       sloc++;
       array[sloc] = c;
}
 
    // Вилучення об'єкта з черги.
template <class qType> qType queueClass<qType>::Put()
{ if(rloc == i)
{ cout << "Стек порожній" << endl; return 0; }
for(int item = size-1; item>=0; item--)
cout<<array[item]<<endl;
}
template <class qType> void queueClass<qType>::func(int response)
{
    //cout<<"ghfth"
    
    //while(response<1||response>5);
switch(response) 
    {
    case 1:
        array[i]="Komp";
        for (int k=1;k<=i;k++)
        cout<<array[k]<<" , ";
        i++;
        break;
    case 2:
        array[i]="Flash";
        for (int k=1;k<=i;k++)
        cout<<array[k]<<" , ";
        i++;
        break;
    case 3:
        array[i]="Nout";
        for (int k=1;k<=i;k++)
        cout<<array[k]<<" , ";
        i++;
        break;
    case 4:
        array[i]="Phone";
        for (int k=1;k<=i;k++)
        cout<<array[k]<<" , ";
        i++;
        break;
        
    case 5:
//        return 0;
        //exit (1);
        cout<<Put();
        break;
    }
cout<<endl;
 
}
    
 
int main()
{   
    setlocale (LC_ALL,".1251");
    int response;
    int q=1;
    queueClass<char*> ObjA;         // Створюємо дві черги для int-значень.
   do {
 
    cout<<"1.Komp"<<endl
        <<"2.Flesh"<<endl
        <<"3.Nout"<<endl
        <<"4.Phone"<<endl
        <<"5.korzuna"<<endl;
    cout<<"Vvedin № tovaru: "<<endl;
    cin>>response;
    }
    while(response!=5);
 
    ObjA.func(response); cin>>response;
    ObjA.Put();

  
  return 0;
}

11

Re: помилка з функціонуванням і викликом функції Put()

ну так-так, те шо закоментовано не враховується

12

Re: помилка з функціонуванням і викликом функції Put()

z.igor.9v написав:

ну так-так, те шо закоментовано не враховується

Я все одно не бачу у цьому коді змісту. Хоча б

queueClass<char*> ObjA;         // Створюємо дві черги для int-значень.

Розберіться, що ви хочете від програми, а тоді пишіть код.

13 Востаннє редагувалося Ярослав (16.04.2013 06:19:39)

Re: помилка з функціонуванням і викликом функції Put()

У мене особисто компілятор лається на void main().
Код Bartash працює.

14

Re: помилка з функціонуванням і викликом функції Put()

Наскільки я зрозумів вашу задачу:

/* 
 * File:   main.c
 * Author: YaR
 *
 * Created on April 16, 2013, 7:20 AM
 */

#include <stdio.h>
#include <stdlib.h>
/*
 * 
 */
int main(int argc, char** argv) {
    int a=0, i=0;
    char *tovar[6];
    
    tovar[0] = "Yabluka";
    tovar[1] = "Grushi";
    tovar[2] = "Vyshni";
    tovar[3] = "Korycya";
    tovar[4] = "CAJIO";
    printf("Vy na rynku.\n");
    printf("Pered vamy lezhat':\n");
    while(i < 5){
        printf("%d: %s\n", i+1, tovar[i]);
        i++;
    }
    printf("Oberyt, yakyi tovar poklasty v koshik:\n");
    scanf("%d", &a);
    if(a < 1 || a > 5)
        printf("Vy nichogo ne poklaly v koshik, pishly nizchym\n");
    else if(a == 5)
        printf("Horoshyi vybir, %s\n", tovar[4]);
    else
        printf("Vy obraly %s", tovar[a-1]);
    return (EXIT_SUCCESS);
}

Якщо є бажання - виносьте в окрему функцію.