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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法调用基础构造函数 - 获取读取访问权限[重复]相关的知识,希望对你有一定的参考价值。

我正在设置一个程序,它使用'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)
{

}

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

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

答案

使用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)
{
}

以上是关于无法调用基础构造函数 - 获取读取访问权限[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Java内构造函数关键字权限修饰符访问控制及面向对象的特性!

Jave 类的继承

无法从派生类构造函数参数访问受保护的基类成员[重复]

PHP动态获取类构造函数并调用它来创建一个新实例[重复]

无法从从 sql 数据库读取的 javascript 函数中获取返回数组 [重复]

1.27 Java基础总结 ①访问修饰符访问权限②类和方法的基本声明和使用1.27 Java基础总结 ①访问修饰符访问权限②类和方法的基本声明和使用