如何在头文件中声明数组,在cpp中声明init

时间:2018-02-20 15:43:02

标签: c++

我正在编写Saleae Custom Analyzer,但我也是C ++的新手 这在类中不起作用: Declare array in C++ header and define it in cpp file?
如何在课堂上做到这一点?

class SimpleSerialSimulationDataGenerator
{
public:
    SimpleSerialSimulationDataGenerator();
    ~SimpleSerialSimulationDataGenerator();

    void Initialize( U32 simulation_sample_rate, SimpleSerialAnalyzerSettings* settings );
    U32 GenerateSimulationData( U64 newest_sample_requested, U32 sample_rate, SimulationChannelDescriptor** simulation_channel );

protected:
    SimpleSerialAnalyzerSettings* mSettings;
    U32 mSimulationSampleRateHz;

protected:
    void CreateSerialByte();
    U8 mSerialText[3] = {0xAA, 0x01, 0x55};
    U32 mStringIndex = 0;

    SimulationChannelDescriptor mSerialSimulationData;

};

mSerialText是我想在.cpp下面初始化而不是在标题中:

SimpleSerialSimulationDataGenerator::SimpleSerialSimulationDataGenerator()
{
    mSerialText = {0xAA, 0x01, 0x55};
}

但是在cpp中它说'必须是左值' 我可以稍后改变长度吗? 我可以稍后改变价值吗? 我的梦想解决方案是在头文件中声明没有长度的数组,并在cpp文件中使用随机数据初始化。

2 个答案:

答案 0 :(得分:3)

对于C ++中的可变长度数组,请使用std::vector

在您的标题文件中,您将拥有:

std::vector<U8> mSerialText;

然后在源文件中,您可以使用{}语法对其进行初始化,就像在您的示例中一样:

mSerialText = {0xAA, 0x01, 0x55};

它具有operator[]at功能的索引访问权限,并且超出范围检查。要插入新元素,请致电push_back。 您可以阅读有关如何在here

上使用向量的更多信息

答案 1 :(得分:-1)

如果你真的想要一个固定大小的数组:

// header
struct A {
    int a[3];
    A();
};

// cpp source
A :: A() : a{1,2,3} {
}