Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
2 / 2 / 1
Регистрация: 17.08.2014
Сообщений: 28
1

Как получить значение из метода класса, если метод возвращает указатель?

31.08.2014, 12:22. Показов 2565. Ответов 8
Метки нет (Все метки)

Всем привет. Как получить значение из метода класса, если метод возвращает указатель? Вот тут я пилю типо класса аккаунтов, у меня не получается.
Заголовок
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#define MAX_ACCOUNTS    10
 
#pragma once
class account
{
public:
    account(char *login, char *password);
    ~account();
 
    void set_account_password(int id, char *password);
    void set_account_name(int id, char *name);
 
    char *get_account_password(int id);
    char *get_account_name(int id);
 
private:
    char *_account[MAX_ACCOUNTS], *_password[MAX_ACCOUNTS];
};
account.cpp
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
#include "account.h"
 
int g_AccountNum = 0;
 
account::account(char *login, char *password)
{
    set_account_name(g_AccountNum, login);
    set_account_password(g_AccountNum, password);
 
    g_AccountNum++;
}
 
 
account::~account()
{
}
 
void account::set_account_name(int id, char *name)
{
    _account[id] = name;
}
 
void account::set_account_password(int id, char *password)
{
    _account[id] = password;
}
 
char* account::get_account_name(int id)
{
    return _account[id];
}
 
char* account::get_account_password(int id)
{
    return _password[id];
}
main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
#include "account.h"
#include <iostream>
 
int main()
{
    account acc("TestAcc", "TestPass");
    char *b = acc.&get_account_name(0); // Вот тут как получить?
    printf("%s", *b);
    std::system("pause");
    return 0;
}
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.08.2014, 12:22
Ответы с готовыми решениями:

C_str() для метода класса возвращает пустой указатель
Есть некий класс, с методом getValue(), который возвращает std::string снаружи я вызываю...

Указатель на метод класса в качестве аргумента метода класса
Функция _createFun вызывается для создания ХХХ в основном классе. Но вот потребовалось создать ХХХ...

Почему не возвращается значение через указатель из метода класса?
Вот решил проверить поведение указателя в программе (я только учу C++), как оказалось после выхода...

Как передать в метод класса Menu указатель на метод дочернего класса?
Как передать в метод базового класса указатель на метод дочернего: class Menu() { protected: ...

8
1402 / 644 / 135
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
31.08.2014, 12:29 2
strcpy?
0
Эксперт С++
1667 / 1039 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
31.08.2014, 12:30 3
C++
1
2
char *b = acc.get_account_name(0);
printf("%s", b);
1
Модератор
Эксперт по электронике
8494 / 6320 / 855
Регистрация: 14.02.2011
Сообщений: 21,909
31.08.2014, 12:31 4
Цитата Сообщение от Erasus Посмотреть сообщение
char *b = acc.&get_account_name(0); // Вот тут как получить?
C++
1
char *b = acc.get_account_name(0);
поскольку
Цитата Сообщение от Erasus Посмотреть сообщение
char *get_account_name(int id);
уже возвращает указатель на char
0
2 / 2 / 1
Регистрация: 17.08.2014
Сообщений: 28
31.08.2014, 12:32  [ТС] 5
Так скомпилировалось, но при запуске ошибку дает:
C++
1
2
3
        *84 'T'  char
+       acc {_account=0x00faf938 {0x0033cc6c "TestPass", 0xcccccccc <Ошибка при чтении символов строки.>, 0xcccccccc <Ошибка при чтении символов строки.>, ...} ...}  account
+       b   0x0033cc6c "TestPass"   char *
0
Модератор
Эксперт по электронике
8494 / 6320 / 855
Регистрация: 14.02.2011
Сообщений: 21,909
31.08.2014, 12:37 6
класс у тебя спроектирован неправильно
во первых
Цитата Сообщение от Erasus Посмотреть сообщение
int g_AccountNum = 0;
глобальная
при создании больше чем один объект, будет указывать куда угодно
лучше сделать членом класса
во вторых
лучше в классе хранить строки (массив строк), а не указатели на них
1
2 / 2 / 1
Регистрация: 17.08.2014
Сообщений: 28
31.08.2014, 13:48  [ТС] 7
Вот переделал вот так, но все равно не работает
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <vector>
#define MAX_ACCOUNTS    10
 
#pragma once
class account
{
public:
    account(char *login, char *password);
    ~account();
 
    void set_account_password(int id, char *password);
    void set_account_name(int id, char *name);
 
    char *get_account_password(int id);
    char *get_account_name(int id);
 
private:
    char _account[MAX_ACCOUNTS][128], _password[MAX_ACCOUNTS][128];
    int g_AccountsNum = 0;
};
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
#include "account.h"
 
account::account(char *login, char *password)
{
    set_account_name(g_AccountsNum, login);
    set_account_password(g_AccountsNum, password);
 
    g_AccountsNum++;
}
 
 
account::~account()
{
}
 
void account::set_account_name(int id, char *name)
{
    strcpy(_account[id], name);
}
 
void account::set_account_password(int id, char *password)
{
    strcpy(_password[id], password);
}
 
char* account::get_account_name(int id)
{
    return _account[id];
}
 
char* account::get_account_password(int id)
{
    return _password[id];
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
#include "account.h"
#include <iostream>
 
int main()
{
    account acc("TestAcc", "TestPass");
    char *b = acc.get_account_name(0);
    printf("%s", *b);
    std::system("pause");
    return 0;
}
Добавлено через 9 минут
Ой, инклуд вектора забыл убрать, не обращайте внимания )
0
97 / 99 / 30
Регистрация: 21.10.2012
Сообщений: 320
31.08.2014, 13:49 8
C++
1
printf("%s", *b);
C++
1
printf("%s", b);
0
Модератор
Эксперт по электронике
8494 / 6320 / 855
Регистрация: 14.02.2011
Сообщений: 21,909
31.08.2014, 14:21 9
Цитата Сообщение от Erasus Посмотреть сообщение
int g_AccountsNum = 0;
как это у тебя скомпилировалось?
нужно в конструкторе обнулять
примерно так
C++
1
2
3
4
5
6
7
8
account::account(char *login, char *password)
{
  g_AccountsNum=0;
    set_account_name(g_AccountsNum, login);
    set_account_password(g_AccountsNum, password);
 
    g_AccountsNum++;
}
подумай над тем, нужно ли чтобы у аккаунта было несколько паролей и логинов?
может лучше массив аккаунтов?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.08.2014, 14:21

Есть метод класса внутри , есть проверка. Если условие сходится то метод должен выдать указатель, иначе булевую переменную
Есть метод класса внутри которого, посередине, есть проверка. Если условие сходится то метод должен...

Как передать входящее значение одного метода класса на возврат в другой метод того же класса?
Я самый новейший новичок. Помогите.Как передать входящее значение (количество еды) метода feed...

Может ли входными параметрами для метода 1 быть значение которое возвращает метод 2?
Господа скажите пожалуйста, если есть 2 метода, может ли быть входными параметрами для метода 1,...

Ошибка, если метод возвращает значение
Вот код который подсчитывает количество слов, но вопрос в другом почему в методе рукается на...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.