Проблема печати массива CHAR на языке C ++ - PullRequest
0 голосов
/ 20 апреля 2019

Я пытаюсь напечатать массив и не могу. У кого-нибудь есть идеи почему?

В файле Main.cpp, конечно, есть вызов функции.

Мой код:

Game.cpp:

#include "Game.h"

Game::Game() {
    char example[] = "PASS";
}

bool Game::PrintArray() {
    cout << example[0] << endl;
    return true;
}

Game.h:

#include <iostream>
#include <array>
#include <iostream>
#include <string>

using namespace std;

#ifndef GAME_H_
#define GAME_H_

class Game {
private:
    char example[];
public:
    Game();
    bool PrintArray();

};

#endif /* GAME_H_ */

1 Ответ

2 голосов
/ 20 апреля 2019

В вашем коде есть три проблемы:

1) Пример массива в Game.h - статический массив нулевой длины (поэтому вы не можете добавлять туда символы). Решение: создать константный указатель на массивсимволы

2) Внутри конструктора Game вы создаете НОВЫЙ пример переменной, не влияйте на переменную в Game.h -> ваша переменная в классе просто не обновляет решение: example = "PASS";

3) В func Game :: PrintArray вы печатаете только первого персонажа. Решение: cout << example << endl;

Game.h:

class Game {
private:
    const char* example;
public:
    Game();
    bool PrintArray();

};

Game.cpp:

Game::Game() {
    example = "PASS";
}

bool Game::PrintArray() {
    cout << example << endl;
    return true;
}

Но еще более правильным решением является использование std::string.Тогда вам не нужно беспокоиться о выделенной / нераспределенной памяти:

Game.h:

class Game {
private:
    std::string example;
public:
    Game();
    bool PrintArray();

};

Game.cpp:

Game::Game() {
    example = "PASS";
}

bool Game::PrintArray() {
    cout << example << endl;
    return true;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...