gpt4 book ai didi

c++ - 在类中初始化静态指针

转载 作者:行者123 更新时间:2023-11-30 01:56:53 25 4
gpt4 key购买 nike

我正在尝试将静态指针初始化为类定义中的数组,但出现运行时错误。我见过类似的例子,但我不能让它工作,也不知道为什么。我试过的一些示例代码是:

class Header
{
private:
static int *pointer;
public:
int getVal(int val);
};

类定义:

#include "Header.h"

int* Header::pointer = new int[] {0, 1, 2, 3, 4};

int Header::getVal(int val)
{
return pointer[val];
}

主要内容:

#include "Header.h"
#include <iostream>
int main(int argc, char ** argv)
{
Header header;

for (int i = 0; i < 5; i++)
{
std::cout << header.getVal(i);
}
}

运行它会在初始化指针时导致错误。如果我在调试器中运行它并忽略错误,我可以看到指针在开始时被初始化为 0。如果我继续单步执行它,我会收到另一个错误消息,提示堆已损坏。是否有可能以这种方式初始化指针?如果没有,是否有任何关于如何在类定义中将成员变量指针初始化为数组并为其赋值而不必单独分配数组的每个元素的建议。

最佳答案

你可能会逃脱:

class Header
{
public:
int getVal(int valIndex);
};

然后

#include "Header.h"

static int s_vals[] = {0, 1, 2, 3, 4}; // could move this line to B

int Header::getVal(int valIndex)
{
// B
return s_vals[valIndex];
}

考虑到您在编译时就知道数组的大小,如果您无论如何都提供访问器,则无需公布实现细节。

关于c++ - 在类中初始化静态指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19360862/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com