Есть ли способ использовать параметры из конструктора в заголовке C ++ Flie - PullRequest
0 голосов
/ 17 марта 2020

Я хочу использовать значения, которые я объявляю в конструкторе с переданными переменными в файле заголовка. Это как-то возможно? В моем случае я даю конструктору два значения типа int с этими значениями. Я хочу установить размер массива. Был ли способ сделать это в заголовочном файле? Как это:

class test
{
public:
    test(int valueA);  //Constructor
 float testArray [valueA];  //Array
}

Ответы [ 2 ]

3 голосов
/ 17 марта 2020

Нет, вы не можете так делать, и нет, это даже не законно в C ++. Размер массива должен быть известен во время компиляции. Вместо этого следует использовать std::vector<float> и инициализировать его в списке инициализатора конструкторов:

#include <vector>

class test
{
public:
    test(int valueA) : testArray(valueA) {}
    std::vector<float> testArray; 
}

Это инициализирует testArray со значениями valueA.

0 голосов
/ 17 марта 2020

Как написано: нет.

Два варианта:

Использовать класс, которому не нужен установленный размер (например, std :: vector). Это лучший подход.

Или динамически создать массив, как только вы узнаете размер. Это не очень хороший подход, но он может быть ближе к цели исходного вопроса. Как указано в комментариях, чтобы избежать проблем с динамической памятью c, поскольку существует деструктор, вам, вероятно, нужен конструктор копирования и конструктор назначения копирования, чтобы гарантировать, что у вас не будет двух текстовых классов, совместно использующих один и тот же массив.

class test
{
public:
    test(int valA)
    {
        testArray = new float[valA];
    }

    ~test()
    {
        delete[] testArray;
    }
private:
    float* testArray
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...