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

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

31.08.2014, 12:22. Просмотров 1482. Ответов 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
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.08.2014, 12:22
Ответы с готовыми решениями:

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

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

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

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

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

8
Dani
1395 / 639 / 134
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
Завершенные тесты: 1
31.08.2014, 12:29 2
strcpy?
0
Nick Alte
Эксперт С++
1655 / 1027 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
31.08.2014, 12:30 3
C++
1
2
char *b = acc.get_account_name(0);
printf("%s", b);
1
ValeryS
Модератор
7841 / 5827 / 762
Регистрация: 14.02.2011
Сообщений: 20,020
Завершенные тесты: 1
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
31.08.2014, 12:31
Erasus
2 / 2 / 1
Регистрация: 17.08.2014
Сообщений: 28
Завершенные тесты: 1
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
ValeryS
Модератор
7841 / 5827 / 762
Регистрация: 14.02.2011
Сообщений: 20,020
Завершенные тесты: 1
31.08.2014, 12:37 6
класс у тебя спроектирован неправильно
во первых
Цитата Сообщение от Erasus Посмотреть сообщение
int g_AccountNum = 0;
глобальная
при создании больше чем один объект, будет указывать куда угодно
лучше сделать членом класса
во вторых
лучше в классе хранить строки (массив строк), а не указатели на них
1
Erasus
2 / 2 / 1
Регистрация: 17.08.2014
Сообщений: 28
Завершенные тесты: 1
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
Denno
93 / 95 / 30
Регистрация: 21.10.2012
Сообщений: 319
Завершенные тесты: 3
31.08.2014, 13:49 8
C++
1
printf("%s", *b);
C++
1
printf("%s", b);
0
ValeryS
Модератор
7841 / 5827 / 762
Регистрация: 14.02.2011
Сообщений: 20,020
Завершенные тесты: 1
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
31.08.2014, 14:21
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.08.2014, 14:21

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

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

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


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

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

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