首页 \ 问答 \ 在C ++中的循环引用[复制](Circular Reference in C++ [duplicate])

在C ++中的循环引用[复制](Circular Reference in C++ [duplicate])

这个问题在这里已经有了答案:

我正在做一个Snake游戏,并且我在C ++中遇到了Circular Reference的问题。 这是SnakeBody类的头部,代表Snake的任何部分,而不是头部。

#ifndef SNAKEBODY_HPP_
#define SNAKEBODY_HPP_

class SnakeBody {
    public:
        SnakeBody(SnakeHead *origin, int left, int x, int y);
        ~SnakeBody() = default;
        void move();
        void grow(int size);
    protected:
        SnakeBody *next;
        SnakeHead *head;
        SnakeGame *game;
        int x;
        int y;
        int growWait;
};

#endif /* !SNAKEBODY_HPP_ */

还有源代码(包含构造函数的部分)。

#include "../include/SnakeHead.hpp"
#include "../include/SnakeGame.hpp"
#include "../include/SnakeBody.hpp"

SnakeBody::SnakeBody(SnakeHead *origin, int left, int x, int y)
{
    this->head = origin;
    this->game = this->head->getGame();
    this->x = x;
    this->y = y;
    this->growWait = 0;
    if (left > 0)
        this->next = new SnakeBody(origin, left - 1, x + 1, y);
    else
        this->next = nullptr;
}

我一直在关心如何使每个包含在源代码中而不是标题中,以避免未完成的引用和循环。 但它仍然显示SnakeHead有一个未定义的参考。

SnakeBody:蛇的任何部分不是头部。 SnakeHead:蛇的头。 SnakeGame:包含棋盘的状态,需要SnakeHead和SnakeHead的参考,而SnakeBody需要SnakeGame的参考来获取有关游戏状态的数据(例如墙壁,食物等)。

错误消息是:./src/../include/SnakeBody.hpp:19:9:错误:'SnakeHead'没有命名一个类型; 你的意思是'SnakeBody'吗? SnakeHead *头;


This question already has an answer here:

i'm working on a Snake game and i'm having trouble with Circular Reference in C++. This is the header of the class SnakeBody who represent anypart of the Snake that is not the head.

#ifndef SNAKEBODY_HPP_
#define SNAKEBODY_HPP_

class SnakeBody {
    public:
        SnakeBody(SnakeHead *origin, int left, int x, int y);
        ~SnakeBody() = default;
        void move();
        void grow(int size);
    protected:
        SnakeBody *next;
        SnakeHead *head;
        SnakeGame *game;
        int x;
        int y;
        int growWait;
};

#endif /* !SNAKEBODY_HPP_ */

And there is the source code (the part containing the constructor).

#include "../include/SnakeHead.hpp"
#include "../include/SnakeGame.hpp"
#include "../include/SnakeBody.hpp"

SnakeBody::SnakeBody(SnakeHead *origin, int left, int x, int y)
{
    this->head = origin;
    this->game = this->head->getGame();
    this->x = x;
    this->y = y;
    this->growWait = 0;
    if (left > 0)
        this->next = new SnakeBody(origin, left - 1, x + 1, y);
    else
        this->next = nullptr;
}

I have been carefull about make every include in source and not header to avoid unfinished reference and loop. But it still appear that SnakeHead has a undefined reference.

SnakeBody : Any part of the snake that is not the head. SnakeHead : The head of the snake. SnakeGame : Contain the state of the board, need a reference of SnakeHead and SnakeHead and SnakeBody need a reference of SnakeGame to get data about the state of the game (ie : wall, food, etc...).

The error message is : ./src/../include/SnakeBody.hpp:19:9: error: ‘SnakeHead’ does not name a type; did you mean ‘SnakeBody’? SnakeHead *head;


原文:https://stackoverflow.com/questions/49684818
更新时间:2022-09-27 21:09

最满意答案

其实你从FirstViewController设置委托属性,然后当你提交LogInViewController你已经编写了代码var delegate:SendDel!=nil ,这使得每次点击按钮时委托nil

所以请尝试以下代码:

 var delegate: SendDel?

希望对你有效。


Actually you setting the delegate property from FirstViewController and then when you present the LogInViewController you have write the code var delegate:SendDel!=nil which makes delegate nil every time you tapped the button.

So try below code :

 var delegate: SendDel?

Hope it works for you.

相关问答

更多

相关文章

更多

最新问答

更多
  • 您如何使用git diff文件,并将其应用于同一存储库的副本的本地分支?(How do you take a git diff file, and apply it to a local branch that is a copy of the same repository?)
  • 将长浮点值剪切为2个小数点并复制到字符数组(Cut Long Float Value to 2 decimal points and copy to Character Array)
  • OctoberCMS侧边栏不呈现(OctoberCMS Sidebar not rendering)
  • 页面加载后对象是否有资格进行垃圾回收?(Are objects eligible for garbage collection after the page loads?)
  • codeigniter中的语言不能按预期工作(language in codeigniter doesn' t work as expected)
  • 在计算机拍照在哪里进入
  • 使用cin.get()从c ++中的输入流中丢弃不需要的字符(Using cin.get() to discard unwanted characters from the input stream in c++)
  • No for循环将在for循环中运行。(No for loop will run inside for loop. Testing for primes)
  • 单页应用程序:页面重新加载(Single Page Application: page reload)
  • 在循环中选择具有相似模式的列名称(Selecting Column Name With Similar Pattern in a Loop)
  • System.StackOverflow错误(System.StackOverflow error)
  • KnockoutJS未在嵌套模板上应用beforeRemove和afterAdd(KnockoutJS not applying beforeRemove and afterAdd on nested templates)
  • 散列包括方法和/或嵌套属性(Hash include methods and/or nested attributes)
  • android - 如何避免使用Samsung RFS文件系统延迟/冻结?(android - how to avoid lag/freezes with Samsung RFS filesystem?)
  • TensorFlow:基于索引列表创建新张量(TensorFlow: Create a new tensor based on list of indices)
  • 企业安全培训的各项内容
  • 错误:RPC失败;(error: RPC failed; curl transfer closed with outstanding read data remaining)
  • C#类名中允许哪些字符?(What characters are allowed in C# class name?)
  • NumPy:将int64值存储在np.array中并使用dtype float64并将其转换回整数是否安全?(NumPy: Is it safe to store an int64 value in an np.array with dtype float64 and later convert it back to integer?)
  • 注销后如何隐藏导航portlet?(How to hide navigation portlet after logout?)
  • 将多个行和可变行移动到列(moving multiple and variable rows to columns)
  • 提交表单时忽略基础href,而不使用Javascript(ignore base href when submitting form, without using Javascript)
  • 对setOnInfoWindowClickListener的意图(Intent on setOnInfoWindowClickListener)
  • Angular $资源不会改变方法(Angular $resource doesn't change method)
  • 在Angular 5中不是一个函数(is not a function in Angular 5)
  • 如何配置Composite C1以将.m和桌面作为同一站点提供服务(How to configure Composite C1 to serve .m and desktop as the same site)
  • 不适用:悬停在悬停时:在元素之前[复制](Don't apply :hover when hovering on :before element [duplicate])
  • 常见的python rpc和cli接口(Common python rpc and cli interface)
  • Mysql DB单个字段匹配多个其他字段(Mysql DB single field matching to multiple other fields)
  • 产品页面上的Magento Up出售对齐问题(Magento Up sell alignment issue on the products page)