【问题标题】:Is there any way to use parameters from the constructor in a c++ header Flie有没有办法在 c++ 头文件中使用构造函数中的参数
【发布时间】:2020-06-28 06:33:44
【问题描述】:

我想使用我在构造函数中声明的值以及在Header文件中传递的变量。这有可能吗?就我而言,我给构造函数两个 int 值,这些值我想设置数组的大小。有没有办法在头文件中做到这一点?像这样:

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

【问题讨论】:

  • 拼写为std::vector<float>,你会发现它很漂亮
  • ecgxChannel 不是test 的构造函数,这可能是一个错字?
  • 您的示例代码中没有二维数组。你的意思是一维数组还是二维数组?每种情况下的建议都会有所不同。
  • @churill 那是我的错。它应该是 test(int valueA);

标签: c++ arrays constructor header initialization


【解决方案1】:

不,你不能这样做,不,这甚至不是合法的 C++。数组的大小必须在编译时知道。您应该改用std::vector<float> 并在构造函数初始化列表中对其进行初始化:

#include <vector>

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

这将使用valueA 值初始化testArray

【讨论】:

  • 二维向量也可以这样吗?
  • @MB1995 是的,有很多问题涵盖了这个主题。以This one 为例。
【解决方案2】:

如书面:没有。

两种选择:

使用不需要其大小设置的类(如 std::vector)。这是更好的方法。

或者在知道大小后动态创建数组。这不是一个好方法,但可能更接近原始问题的意图。正如 cmets 中指出的那样,为了避免动态内存问题,由于有一个析构函数,您可能需要一个复制构造函数和一个复制赋值构造函数,以确保您最终不会有两个文本类共享同一个数组。

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

    ~test()
    {
        delete[] testArray;
    }
private:
    float* testArray
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-24
    • 2015-10-11
    • 1970-01-01
    • 2011-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多