0 / 0 / 0
Регистрация: 19.03.2012
Сообщений: 7
1

'const char* ...' does not much 'const char*' ???

19.03.2012, 04:59. Показов 893. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброе время суток, товарищи!
Застрял на ошибке: " error: argument of type ‘const char* (person::)()’ does not match ‘const char*’ "
(ниже в коде выделена)
Как я предполагаю все дело в возврате функций "get_name" и "get_surname" (но не уверен)

Заранее извиняюсь за количество кода(


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
class person {
    private:
     char *surname;
     char *name;
   
      public:        
    person (char* sur,char* n) {
            surname=new char[strlen(sur)+1];
        strcpy(surname, sur);
        name=new char[strlen(n)+1];
        strcpy(name,n);
        }
       
    ~person () {
        delete[] surname;
        delete[] name;
        }
 
            const char* get_name() 
               {
                return name;
                }
           const char* get_surname()
                {
                return surname;
        }
    };
        
 
class acc{
    private:
    int data_cr[3];
    double sum;
        info *t_inf[];
    
    public:
    person *ob1;
    void Set_Elem(int d, int m, int y, double s,char* sur,char* n) 
       {
            
            data_cr[0]=d;
        data_cr[1]=m;
        data_cr[2]=y;
        sum=s;
        ob1= new person (sur,n);  
           
           }                      
    };
    
int main()
{ char f;
  int d,m,y,i,ig=0;
  char *a,*b;
  double s;
  
  acc *fi[20];
for(;;)
{
  cout<<" << Want to create an account?  (Y/n)"<<endl;        
  cin>>f;
  if(f=='Y' || f=='y')
      { a=new char[24];
        b=new char[15];
        cout<<endl<<endl<<" << Your name : "<<endl<<" >> ";
        cin>>b;
        cout<<endl<<" << Surname : "<<endl<<" >> ";
        cin>>a;
        cout<<endl<<" << What's the date? : "<<endl<<" << Day : "<<endl<<" >> ";
        cin>>d;
        cout<<endl<<" << Month : "<<endl<<" >> ";
        cin>>m;
        cout<<endl<<" << Year : "<<endl<<" >> ";
        cin>>y; 
        
        fi[ig]=new acc();
        fi[ig]->Set_Elem(d,m,y,0,a,b);
        
       cout<<endl<<" << Congratulations,"<<b<<" "<<a<<",account was created!"<<endl;    
        
        //delete []a;
        //delete []b;
      }
 
        cout<<"Have an acount? (Y/n) "<<endl<<" >> "; 
        cin>>f;
        if(f=='Y' || f=='y')
            {//a=new char[24];
             //b=new char[15];
             cout<<endl<<" << Please, log in. "<<endl<<"Name"<<endl<<" >> ";
             cin>>b;
             cout<<endl<<" << Surname : "<<endl<<" >> ";
             cin>>a;
          
           for(i=0; i<=ig; i++)
           if(strcmp(b,(*fi)[i].ob1->get_name) && strcmp(a,(*fi)[i].ob1->get_surname))   //Ошибка в этой строке 
               // error: argument of type ‘const char* (person::)()’ does not match ‘const char*' 
 
                  {....};
   
   ............
   ............
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.03.2012, 04:59
Ответы с готовыми решениями:

Чем отличаются объявления const char* и const* char
Прошу объяснить мне, чем отличаются объявления const char* и const* char и как объявить: указатель...

Error C2440: return: невозможно преобразовать "const char *" в "const char (&)[6]"
Вроде все правильно а все равно не работает. Подскажите в чем ошибка #include &lt;iostream&gt; ...

char operator[](unsigned short offset) const; // что означает const?
Собстенно вопрос уже озвучен :).

Ошибка: Cannot convert 'char const[18]' to 'const wchar_t *'
Unit1.cpp(59): E2034 Cannot convert 'char const' to 'const wchar_t *' Full parser context ...

4
179 / 127 / 25
Регистрация: 12.01.2012
Сообщений: 623
19.03.2012, 05:34 2
Смысла в коде я вообще не вижу. Вот нафиг публичные set/get методы возвращают указатели на закрытые данные??? В чём тогда смысл объявлять их как закрытые. Во-вторых, код приведён не полностью и нельзя сказать почему компилятор ругается в этом месте. Вот что я думаю по поводу этой строки
C++
1
strcmp(b,(*fi)[i].ob1->get_name) && strcmp(a,(*fi)[i].ob1->get_surname)
здесь зачем-то указатель *fi занесён в скобки, это по-моему не нужно, компилятор/программист это может расценить как приведение типа или вызов функции. Далее функции get_name по типу возвращаемого значения должны возвращать константный указатель, однако эти функции возвращают НЕ константный указатель
0
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
19.03.2012, 05:50 3
И почему вы пишите на C++ и используете строки в стиле C, когда есть стандартный класс string?
Цитата Сообщение от Buckstabue Посмотреть сообщение
функции возвращают НЕ константный указатель
Возвращают они константный указатель.

Добавлено через 8 минут
get_name это функция, а вызов функции производится с скобками.
C++
1
if(strcmp(b,(*fi)[i].ob1->get_name()) && strcmp(a,(*fi)[i].ob1->get_surname()))
2
601 / 569 / 104
Регистрация: 07.11.2010
Сообщений: 2,004
19.03.2012, 11:21 4
Цитата Сообщение от Toshkarik Посмотреть сообщение
И почему вы пишите на C++ и используете строки в стиле C, когда есть стандартный класс string?
наверно в том и смысл задания, чтобы обойтись без string
0
0 / 0 / 0
Регистрация: 19.03.2012
Сообщений: 7
19.03.2012, 15:00  [ТС] 5
"Смысла в коде я вообще не вижу. Вот нафиг публичные set/get методы возвращают указатели на закрытые данные??? В чём тогда смысл объявлять их как закрытые."

Ф-методы get_name и get_surname ,были упрощенны специально (чтобы не выкладывать 300 строк кода)
также по этому упрощена и неполна сама программа
set -у меня вообще ничего не возвращает (его в коде нет!)

На все остальные, имеющиеся сейчас, вопросы по поводу задания правильно ответили Toshkarik и panicwassano )))
0
19.03.2012, 15:00
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.03.2012, 15:00
Помогаю со студенческими работами здесь

Ошибка "значение типа "const char [81]" нельзя использовать для инициализации сущности типа "const unsigned char [61]"
Прошу помощи, так как раньше прога работала, сейчас решил вернуться и выдает ошибку: #pragma once...

Cannot convert 'const wchar_t *' to 'const char *'
HMODULE hMod=GetModuleHandle(NULL); if(!hMod) { } HRSRC...

Error C2664: sprintf: невозможно преобразовать параметр 1 из 'const char *' в 'char *'
error C2664: sprintf: невозможно преобразовать параметр 1 из 'const char *' в 'char *' void...

Строки: почему компилятор пишет , что переменная типа char несовместима с const char?
char pass; int password( int d) { int m; char p; cout &lt;&lt; &quot;Введите пароль для доступа к...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru