无法调用基础构造函数 - 获取读取访问权限[重复]

问题描述 投票:-1回答:1

我正在设置一个程序,它使用'DFS'作为'Search'的子类,并调用它的基础构造函数。

程序运行正常,直到我在调用构造函数后放置的断点,我收到错误:

抛出异常:读取访问冲突。 _Pnext是0xCCCCCCD0。

我试图将代码总结为只有重要的东西。

在main.cpp中:

DFS search(gridSize, startPoint, endPoints, walls);

在Search.h中:

public:
    Search(unsigned int gridSize, unsigned int startPoint, unsigned int endPoints[2], vector<int> walls);

在Search.cpp中:

#include "Search.h"

Search::Search(unsigned int gridSize, unsigned int startPoint, unsigned int endPoints[2], vector<int> walls)
{
    sGridSize = gridSize;
    sStartPoint = startPoint;
    sEndPoints[2] = endPoints[2];
    sWalls = walls;
}

在DFS.h中:

#include "Search.h"

#include <vector>

public:
    DFS(unsigned int gridSize, unsigned int startPoint, unsigned int endPoints[2], vector<int> walls);

在DFS.cpp中:

#include "DFS.h"

DFS::DFS(unsigned int gridSize, unsigned int startPoint, unsigned int endPoints[2], vector<int> walls) : Search(gridSize, startPoint, endPoints, walls)
{

}

如果需要更多代码来理解这一点,请问 - 我担心过多粘贴。

任何帮助是极大的赞赏 :)

c++ visual-c++
1个回答
2
投票

使用sEndPoints[2] = endPoints[2],您可以访问双元素数组的第三个元素。而且只分配该值。

C ++解决方案是使用std::array而不是“旧”C风格的数组。或者std::vector

如果您不想这样做,那么解决方案是使用构造函数初始化程序列表,您可以在其中初始化成员变量而不是分配给它们。例如

Search::Search(unsigned int gridSize, unsigned int startPoint, unsigned int endPoints[2], vector<int> walls)
    : sGridSize(gridSize), sStartPoint(startPoint), sEndPoints(endPoints), sWalls(walls)
{
}
© www.soinside.com 2019 - 2024. All rights reserved.