Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 方法在使用虚拟类时返回null ptr_C++_Methods_Interface_Nullptr - Fatal编程技术网

C++ 方法在使用虚拟类时返回null ptr

C++ 方法在使用虚拟类时返回null ptr,c++,methods,interface,nullptr,C++,Methods,Interface,Nullptr,所以我有三节课 存储Recty类对象的类映射 class Map : public GameObject, public InCollisionMap { public: void Setup(); private: Recty *tile[24][32]; }; class InCollisionMap //interface for map { InCollisionRect *tile[24][32]; public: virtual InCollis

所以我有三节课

存储Recty类对象的类映射

class Map : public GameObject, public InCollisionMap
{
public:
    void Setup();
private:
    Recty *tile[24][32];  
};

class InCollisionMap //interface for map
{
    InCollisionRect *tile[24][32];
public:
    virtual InCollisionRect* Tile(int n, int m){
            int n = 0;
            int m = 0;
            return tile[n][m];  //returns object of class Recty
    }
    InCollision();
    ~InCollision();
};
类Recty,该类存储变量类型

class Recty : public GameObject, public InCollisionRect
{
private:
    int type;
public:
    Recty();
    ~Recty();
};

class InCollisionRect //interface for class Recty
    {
    private:
       int type;
    public:
       virtual int get_number(char num);
       InCollisionRect();
       ~InCollisionRect();
};
最后是类游戏对象

class GameObject : public InCollisionObject
{
public:
    GameObject(const char* textureSheet, SDL_Renderer* ren, int x, int y);
    GameObject();
    ~GameObject();
private:
    int xpos;
    int ypos;
    int way;

    SDL_Texture* objTexture;
    SDL_Rect srcRect, destRect;
    SDL_Renderer* renderer;
};

class InCollisionObject // interface for GameObject
{
    int xpos;
    int ypos;
    int way;

    SDL_Texture* objTexture;
    SDL_Rect srcRect, destRect;
    SDL_Renderer* renderer;
public:
    virtual void Collision_Loop(InCollisionMap* target){
          if (target->Tile(i, j)->get_number('t') == 0 {
                        ^
           /*{Tile(i,j) returns nullptr}*/
                  cout<<"NO<<endl;"
          }
    InCollisionObject();
    ~InCollisionObject();
};
我简化了代码,但是数组*平铺中的每个对象都正确初始化了。数组中充满了对象

我在Collision_Loop()中遇到此错误


为什么它会返回null ptr?我该如何解决这个问题呢?

如果没有问题,就没有什么可说的了。这里的随机代码片段,即使是“简化”的,也远不是一个简单的代码片段,因此没有什么用处。确实,一些非常可能的问题是显而易见的,并且可以从这些孤立的代码片段中收集到(不,在父类中声明两个同名的类成员,子类不会将它们转换为单个对象),在显示的代码符合,如stackoverlfow.com中所述。请注意,
InCollisionMap
Map
类中都有
tile
成员。这将是两件不同的事情。数据成员不能是虚拟的。您有多个同名变量。如果将多重继承添加到该变量中,则可能无法访问期望的变量,而是访问具有相同名称的其他变量。谢谢您的帮助。正如你所说的,问题是继承不好。我们在这个网站上有两个人叫无名。我们有麻烦了。
GameObject* player;
Map map;
int main(){
     map.Setup();
     player->Collision_Loop(&map);
 }
Exception thrown: read access violation.
InCollision::Tile[virtual](...) returned nullptr.