精华内容
下载资源
问答
  • 函数不能嵌套定义

    千次阅读 2012-04-14 11:26:54
    C函数总是从主函数开始执行的,其它函数只有在被主函数或其它正在...所有的函数都是相互独立的,他们之间时平行关系,所以不能在一个函数内部定义另一个函数,即不能嵌套定义。函数可以互相调用,但是不能调用主函数。

    C函数总是从主函数开始执行的,其它函数只有在被主函数或其它正在执行的函数调用时才能被程序执行,执行之后返回调用函数,最后返回到主函数,在主函数众结束整个程序的运行。
    所有的函数都是相互独立的,他们之间时平行关系,所以不能在一个函数内部定义另一个函数,即不能嵌套定义。函数可以互相调用,但是不能调用主函数。

    展开全文
  • C++中头文件嵌套定义问题

    千次阅读 2016-03-06 12:46:32
    希望可以借鉴给更多的人,避免这种由头文件嵌套定义所导致的编译错误。 注明:本文章主要内容是从互联网上各个博客或提问中摘录并整合而来。 C++中头文件相互包含的几点问题 首先我们从类的嵌套

    相信大家在做复杂的C++编程的过程中会被复杂的文件之间的关系所难倒。

    在编译文件时遇到这个或那个的非语法错误。这就需要仔细检查你的代码模块了。
    本小白在编写某个C++项目时遇到了这种编译错误。希望可以借鉴给更多的人,避免这种由头文件嵌套定义所导致的编译错误。

    注明:本文章主要内容是从互联网上各个博客或提问中摘录并整合而来。

    C++中头文件相互包含的几点问题

    首先我们从类的嵌套定义开始。

    一、类嵌套的疑问

    假设我们有两个类A和B,分别定义在各自的有文件A.h和B.h中,但是在A中要用到B,B中也要用到A,但是这样的写法当然是错误的:
    class B;

    class A
    {
          public:
              B b;
    };

    class B
    {
          public:
              A a;
    };
    因为在A对象中要开辟一块属于B的空间,而B中又有A的空间,是一个逻辑错误,无法实现的。在这里我们只需要把其中的一个A类中的B类型成员改成指针形式就可以避免这个无限延伸的怪圈了。为什么要更改A而不是B?因为就算你在B中做了类似的动作,也仍然会编译错误,表面上这仅仅上一个先后顺序的问题。
          为什么会这样呢?因为C++编译器自上而下编译源文件的时候,对每一个数据的定义,总是需要知道定义的数据的类型的大小。在预先声明语句class B;之后,编译器已经知道B是一个类,但是其中的数据却是未知的,因此B类型的大小也不知道。这样就造成了编译失败,VC++6.0下会得到如下编译错误:
          error C2079: 'b' uses undefined class 'B'
    将A中的b更改为B指针类型之后,由于在特定的平台上,指针所占的空间是一定的(在Win32平台上是4字节),这样可以通过编译。

    二、不同头文件中的类的嵌套

          在实际编程中,不同的类一般是放在不同的相互独立的头文件中的,这样两个类在相互引用时又会有不一样的问题。重复编译是问题出现的根本原因。为了保证头文件仅被编译一次,在C++中常用的办法是使用条件编译命令。在头文件中我们常常会看到以下语句段(以VC++6.0自动生成的头文件为例):

    #if !defined(AFX_STACK_H__1F725F28_AF9E_4BEB_8560_67813900AE6B__INCLUDED_)
    #define AFX_STACK_H__1F725F28_AF9E_4BEB_8560_67813900AE6B__INCLUDED_
          //很多语句……
    #endif

    其中首句#if !defined也经常做#ifndef,作用相同。意思是如果没有定义过这个宏,那么就定义它,然后执行直到#endif的所有语句。如果下次在与要这段代码,由于已经定义了那个宏,因此重复的代码不会被再次执行。这实在是一个巧妙而高效的办法。在高版本的VC++上,还可以使用这个命令来代替以上的所有:
          #pragma once
    它的意思是,本文件内的代码只被使用一次。

          但是不要以为使用了这种机制就全部搞定了,比如在以下的代码中:

    //文件A.h中的代码
    #pragma once

    #include "B.h"

    class A
    {
          public:
              B* b;
    };

    //文件B.h中的代码
    #pragma once

    #include "A.h"

    class B
    {
          public:
              A* a;
    };

    这里两者都使用了指针成员,因此嵌套本身不会有什么问题,在主函数前面使用#include "A.h"之后,主要编译错误如下:
          error C2501: 'A' : missing storage-class or type specifiers
    仍然是类型不能找到的错误。其实这里仍然需要前置声明。分别添加前置声明之后,可以成功编译了。代码形式如下:

    //文件A.h中的代码
    #pragma once

    #include "B.h"

    class B;

    class A
    {
          public:
              B* b;
    };

    //文件B.h中的代码
    #pragma once

    #include "A.h"

    class A;

    class B
    {
          public:
              A* a;
    };

    这样至少可以说明,头文件包含代替不了前置声明。有的时候只能依靠前置声明来解决问题。我们还要思考一下,有了前置声明的时候头文件包含还是必要的吗?我们尝试去掉A.h和B.h中的#include行,发现没有出现新的错误。那么究竟什么时候需要前置声明,什么时候需要头文件包含呢?

    三、两点原则

          头文件包含其实是一想很烦琐的工作,不但我们看着累,编译器编译的时候也很累,再加上头文件中常常出现的宏定义。感觉各种宏定义的展开是非常耗时间的,远不如自定义函数来得速度。我仅就不同头文件、源文件间的句则结构问题提出两点原则,仅供参考:

    第一个原则应该是,如果可以不包含头文件,那就不要包含了。这时候前置声明可以解决问题。如果使用的仅仅是一个类的指针,没有使用这个类的具体对象(非指针),也没有访问到类的具体成员,那么前置声明就可以了。因为指针这一数据类型的大小是特定的,编译器可以获知。

    第二个原则应该是,尽量在CPP文件中包含头文件,而非在头文件中。假设类A的一个成员是是一个指向类B的指针,在类A的头文件中使用了类B的前置声明并便宜成功,那么在A的实现中我们需要访问B的具体成员,因此需要包含头文件,那么我们应该在类A的实现部分(CPP文件)包含类B的头文件而非声明部分(H 文件)。

    展开全文
  • 微信公众号: 星点课堂 新浪微博:女儿叫老白 网易云课堂:女儿叫... 嵌套结构或嵌套类的设计在软件研发过程中不太常用,但是如果两个类具有密切关系并且独立性不强的化,可以考虑以嵌套的方式进行设计。  

    微信公众号: 星点课堂

    新浪微博:女儿叫老白

    网易云课堂:女儿叫老白

    网易云课堂免费课程:《C++跨平台开发中的编译错误》

    网易云课堂免费课程:《C++老鸟日记》

    ----------------------------------------------------------------------------

    引言:

    ----------------------------------------------------------------------------

           在进行类设计的时候,有些功能或接口可能集中属于某一个功能块,而且该部分接口只会在当前类中使用或者提供。这时候,我们就可以通过嵌套的结构或者嵌套类的设计来实现。

     

    正文:

    ----------------------------------------------------------------------------

           嵌套类的设计一般用在紧密相关的两个类中。

           // item.h

           class CGraphItem {

           public:

                  ……

                  bool deSerializeBinary(QDataStream& ds);

           private:

                  // 端子类,用于表示图元上的端子,该类不对外暴露。它提供的功能通过CGraphItem对外提供。CGraphItem仅提供外部所需的接口,其他接口对外隐藏。

                  class CTerminal

                  {

                  public:

                         bool deSerializeBinary(QDataStream& ds);

                  };

     

           private:

           CTerminal* m_pTerminal[2];

    };

     

    // item.cpp
    bool CGraphItem::deSerializeBinary(QDataStream& ds)

    {

           ……

    if (NULL != m_pTerminal[0])

           m_pTerminal[0]->deSerializeBinary(ds);

    if (NULL != m_pTerminal[1])

           m_pTerminal[1]->deSerializeBinary(ds);

     

           return true;

    }

     

    bool CGraphItem::CTerminal::deSerializeBinary(QDataStream& ds)

    {

           ……

           return true;

    }

           上述代码中,图元类CGraphItem 需要提供图元封装功能,图元上有端子,而图元类只需要把需要对外提供的接口(比如序列化接口deSerializeBinary())暴露出来,而把CTerminal作为私有的类进行了封装。当然也可以把CTerminal类作为public嵌套。这样,外部就可以直接使用该类了。

          

    结语:

    ----------------------------------------------------------------------------

           嵌套结构或嵌套类的设计在软件研发过程中不太常用,但是如果两个类具有密切关系并且独立性不强的化,可以考虑以嵌套的方式进行设计。

     

    展开全文
  • 页面模板之间的嵌套定义以及静态文件的加载方式,例如 header模板 footer模板 如何拼接成一个完整的页面,静态文件(css文件,js文件,图片等)

    先看看我们要实现的效果截图:


    [root@contoso ~]# tree $GOPATH/src/contoso.org -L 3  ##查看项目目录结构

    /root/code/go/src/contoso.org
    └── booking
        ├── debug
        ├── index.go
        ├── index.html
        ├── public
        │   ├── footer.html
        │   └── header.html
        └── static
            ├── css
            ├── images
            └── js

    6 directories, 5 files

    [root@contoso ~]#

    index.html 模板它是主模板,其它模板都是它的子模板,都将被嵌入到index.html模板中


    <!DOCTYPE html><!-- 声明当前页面文件格式符合w3c标准,兼容所有浏览器 -->
    <html> {{/* index.html 它是页面模板 */}}
    {{template "header" .}} {{/* header.html 它是页面嵌入模板,最后的那个点表示将当前模板中的变量传递到header.html模板中 */}}
    <body>
        <div id="container">
            <header>
                    <div class="t-header">  
                        <div class="t-logo">  
                            <a href="#">  
                                <img src="static/images/logo.png" alt="天猫Tmall.com" width="190px" height="27px"/>  
                            </a>  
                        </div>   
                    </div>  
            </header>
            <section class="main">

            </section >
        
    {{template "footer"}} {{/* footer.html 它是页面嵌入模板,双花括号内容后面没有那个点表示footer.html模板中没有变量 */}}
    </body>
    </html>

    子模板header.html 它是页面的嵌入模板

    {{define "header"}} {{/* header.html 它是页面的嵌入模板 */}}
    <head>
        <!-- 声明当前页面编码集:中文(GBK/GB2312),国际编码(utf-8) -->
        <meta http-equiv="Content-Type" content="text/html" charset="utf-8">  
        <!-- 声明当前页面的三要素:title标签以及keywords和description的meta标签,三要素一般都要从数据库表里读取 -->   
        <title>{{.Title}}</title>  {{/* index.html模板中的变量传递到header.html模板中使用 */}}
        <meta name="keywords" content="关键词1,关键词2"><!-- 关键词:title和body内容对应的核心关键词,一般不超过100个字符(50个汉字) -->  
        <meta name="description" content=""><!-- 内容摘要,一般不超过200个字符(100个汉字) -->
        <link type="text/css" rel="stylesheet" href="/static/css/index.css" />
       
    </head>
    {{end}} {{/*  {{ 嵌入模板定义格式:define "嵌入模板名称"}} {{end}}  */}}


    子模板footer.html 它是页面的嵌入模板

    {{define "footer"}} {{/* footer.html 它是页面的嵌入模板 */}}
            <footer>
                
            </footer>
        </div>
    {{end}} {{/*  {{ 嵌入模板定义格式:define "嵌入模板名称"}} {{end}}  */}}


    index.css静态文件的加载方式必须启动静态文件服务,注意项目静态文件目录结构的定义层次,这个与静态文件服务启动有关系

    请留意index.go启动说明,图片,还有js脚本,对于本项目可以直接拷贝图片和js文件到项目对应的目录下,

    js该怎么引用,还是象过去那样写到<head></head>标签里

    body,div{margin:0;padding:0;}  
    body{font-size:12px;font-family:"微软雅黑";color:#666;}  

    html,body{
        height: 100%;
    }

    #container{
        /*保证footer是相对于container位置绝对定位*/
        position:relative;  
        width:100%;
        min-height:100%;
        /*设置padding-bottom值大于等于footer的height值,以保证main的内容能够全部显示出来而不被footer遮盖;*/  
        padding-bottom: 100px;  
        box-sizing: border-box;
    }

    header{
       width:100%;height:85px;background:#ffffff;
    }
    header .t-header{width:1000px;height:85px;background:#ffffff;margin:0 auto;}  
    header .t-header .t-logo{float:left;margin-top:28px;}  
    header .t-header .t-desc{float:right;line-height:85px;font-size:22px;font-weight:300;}

    .main{
        width: 100%;
        height: 200px;
        background: orange;
    }

    footer{
        width: 100%;
        height:100px;   /* footer的高度一定要是固定值*/
        position:absolute;
        bottom:0px;
        left:0px;
        background: #333;
    }


    index.go HTTP Web Server

    package main

    import (
        "html/template"
        "log"
        "net/http"
    )

    func main() {

        h := http.FileServer(http.Dir("static"))
        http.Handle("/static/", http.StripPrefix("/static/", h)) // 启动静态文件服务
        //Header().Set("Expires", time.Now().Format("MON, 02 Jan 2006 15:04:05 GMT"))
        http.HandleFunc("/", load)
        http.ListenAndServe(":8080", nil)
    }

    func load(w http.ResponseWriter, r *http.Request) {
        if r.Method == "GET" {
            t, err := template.ParseFiles("index.html", "public/header.html", "public/footer.html")
            if err != nil {
                log.Fatal(err)
            }

            data := struct {
                Title string
            }{
                Title: "品牌街-上天猫,就够了",
            }

            err = t.Execute(w, data)
            if err != nil {
                log.Fatal(err)
            }
        } else {

        }
    }



    顺便说一下静态文件本地缓存,上面默认已经可以缓存静态文件了,状态码 200 OK  、304 Not Modified200 OK (from cache)的区别

    https://www.bokeyy.com/post/200-ok-from-cache-vs-304-not-modified.html 这篇文章讲得很清楚了

    举例来说,
    客户端第1次请求服务器:你几岁了?
    服务器第1次应答客户端:我18岁了。    状态:200 OK
    ===========
    客户端第2次请求服务器:你几岁了?我猜你18岁了。    客户端点击的刷新按钮
    服务器第2次应答客户端:靠,你知道还问我?          状态:304 Not Modified
    ===========
    客户端第3次请求服务器:你几岁了?我猜你18岁了。    客户端在地址栏按回车发送请求
    服务器第3次应答客户端:靠,你知道还问我?          状态:200 OK (from cache)
    ===========
    ... ...  ...
    ... ...  ...
    第300次请求发送前,直接修改静态文件css或者图片,还是修改css文件的内容实验简单点吧
    客户端第300次请求服务器:你几岁了?我猜你18岁了。    客户端在地址栏按回车发送请求
    服务器第300次应答客户端:靠,你知道还问我?          状态:200 OK (from cache)
    ===========

    第N次请求发送前,直接修改静态文件css或者图片,还是修改css文件的内容实验简单点吧
    客户端第N次请求服务器:你几岁了?我猜你18岁了。      客户端点击的刷新按钮
    服务器第N次应答客户端:我19岁了。                    状态:200 OK,而不是200 OK (from cache)

    结论:因为本地有缓存数据时,不需要向服务器发起http请求,服务器的并发数会明显的减少,可以少处理很多http请求


    展开全文
  • yml文件数组嵌套参数定义

    千次阅读 2019-06-17 22:07:30
    使用spring boot开发项目,参数配置很简单,但是今天遇到一个问题,父子孙三级关系,数组包含数组,这种参数定义应该怎么写哪?下面先看一下我的父子孙三级配置类的参数定义 父(OAuth2Properties) package org....
  • 最近项目中用到了Extjs,刚好碰到了一个问题就是数据模型的从属关系(association),就是我们常说的数据嵌套。本篇文章分两部分,第一部分讲解嵌套数据模型的定义;第二部分讲解嵌套数据模型的显示。 需求描述:...
  • 先前写的一个工具(Qml宏预处理工具)就顺便总结一下if/elif/else/endif之间的嵌套关系,并整理成表。
  • 1、函数就是一个可以被多次调用的功能模块。 1)一个c程序有多个功能模块组成,一个模块可以有多个源程序文件。 (分别:编写、编译、提高效率) 2)一个源文件可以是一个或多个函数组成以及其他有关的内容组成。 ...
  • 嵌套

    2015-05-06 11:08:21
    一个类可以定义在另一个类的内部,前者称为嵌套类(nested class)或嵌套类型(nested type)。嵌套类常用于定义作用实现部分的类。 嵌套类是一个独立的类,与外层类基本没什么关系。特别是,外层类的对象和嵌套类...
  • 定义局部类时需要注意:局部类中不能说明静态成员函数,并且所有成员函数都必须定义在类体内。在实践中,局部类是很少使用的。下面是一个局部类的例子。  int a;  void fun()  {  static
  • javascript函数作用域和嵌套调用关系

    千次阅读 2016-06-07 10:04:24
    JavaScript 的作用域是通过函数来定义的,在一个函数中定义的变量只对这个函数内部可见,我们称为函数作用域。特别注意:JavaScript 的作用域完全是由函数来决定的, if 、 for 语句中...函数作用域的嵌套关系定义时决定
  • 一、在react中,没有嵌套关系的组件之间的通信方式主要有2种: a、拥有共同父组件的兄弟组件之间可以使用context。 具体使用方法可以参考:https://www.jianshu.com/p/a8717edadb18 b、非兄弟组件之间...
  • 首先从最基本的2层嵌套...2层嵌套表也叫二维表格,其中包含两条层次关系的OCCURS语句。以下代码定义了一个2层嵌套表。01 NESTED-TABLE-2. 05 TABLE-ROW OCCURS 2 TIMES. 10 TABLE-COLUMN OCCURS 3 TIMES. 
  • 利用Django REST framework 能很方便的对Django的model嵌套关系进行展示。嵌套关系的展示通过在序列化类中的depth属性来设置,depth表示嵌套关系展开的层数。比如,Djiango自带的User 模型。User关联了Groups ,...
  • 问题:数据库内部嵌套关系实现

    千次阅读 2019-05-14 09:25:33
    具体问题是这样的,我们公司有一张行业表,总共有四级行业需要维护,具体包括一级行业、二级行业、三级行业和四级行业,每个行业之间又存在包含关系,比如四级行业包含于三级行业,三级行业包含于二级行业,二级行业...
  • head标签中可以嵌套的标签

    千次阅读 2019-05-14 10:13:17
    在网页的顶部显示 或者在将网页添加到收藏的时候显示的网页标题就是title中的内容2、meta标签中定了一些元数据 包含作者 修改时间 关键词 这些内容不会再网页中显示,但是会被浏览器解析 这些元数据可以适用于浏览器...
  • MATLAB嵌套函数

    万次阅读 多人点赞 2017-09-20 18:32:00
    嵌套函数的定义嵌套函数,即nested function,就是嵌套在函数体内部的函数。嵌套函数可以出现在一个函数体内部的任何位置,开始以function声明,结束的时候加上end。需要说明的是包含有嵌套函数的函数,无论它是...
  • 20181127——Css层级嵌套关系详解

    千次阅读 2018-11-27 14:54:36
    一组嵌套选择器的实际特性可以计算出来。基本的,使用ID选择器的值是100,使用class选择器的值是10,每个html选择器的值是1。它们加起来就可以计算出特性的值。 p的特性是1(一个html选择器) div p的特性是2(两...
  • Python编程中对于某些需要重复调用的程序,可以使用函数进行定义,基本形式为: def 函数名(参数1, 参数2, ……, 参数N): 其代码形式如下面所示: def function (parameters) : block return vlue...
  • C++ 类的嵌套

    千次阅读 2014-10-01 11:14:07
    在一个类中定义的类称为嵌套类,定义嵌套类的类称为外围类。 定义嵌套类的目的在于隐藏类名,减少全局的...这样可以提高类的抽象能力,并且强调了两个类(外围类和嵌套类)之间的主从关系。下面是一个嵌套类的例子:
  • C++嵌套类和局部类

    2019-04-22 21:21:40
    一个类可以定义在另一个类的内部,前者称为嵌套类,嵌套类时一个独立的类,和外层类基本没什么关系嵌套类必须声明在类的内部,但是可以定义在类的内部或者外部。 在外层类之外定义一个嵌套类时,必须以外层类的...
  • C++嵌套类与局部类

    千次阅读 2015-10-26 23:29:35
    1.1嵌套类的定义在一个类体中定义的类叫作嵌套类。拥有嵌套类的类叫外围类。1.2嵌套类的作用定义嵌套类的初衷是建立仅供某各类目的在于...这样可以提高类的抽象能力,并且强调了两个类(外围类和嵌套类)之间的主从关系
  • Oracle嵌套表简介

    千次阅读 2017-05-19 13:39:59
    一、嵌套表的定义:  嵌套表是表中之表。一个嵌套表是某些行的集合,它在主表中表示为其中的一列。对主表中的每一条记录,嵌套可以包含多个行。在某种意义上,它是在一个表中存储一对多关系的一种方法。考查一...
  • 内部类在维基百科的定义为: 面向对象编程中,内部类(又叫做嵌套类)是在另一个类或者接口中进行声明的类。内部类不同于子类(subclass)。...在Java中,上面的定义可以如下示例: public final class Clazz {
  • Methods for Nesting States嵌套状态的方法States ... There are several ways of nesting states:状态可以相互嵌套嵌套状态有几种方法:Using 'dot notation'. For example .state('contacts.list', {}).使用“点记
  • 嵌套类的语法

    2016-03-12 20:39:02
    嵌套类(nested class)是java类的嵌套形式,一个类可以在另一个类中定义,例如:class OuterClass{ ... class NestedClass{ ... } } 嵌套类与外部类的成员是同等地位的,所以嵌套类就有4种级别的访问权限(与...
  • matlab_函数嵌套

    2016-10-16 16:37:33
    结合主、嵌套函数,分析代码,可以从以下三个方面展开分析: %可以从如下三个方面理解函数嵌套: %1、主函数funmin调用 a,b,c,x1,x2一个参数; %2、被调用函数poly3内含有x1,x2两个参数; %3、结合调用关系,funmin...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 199,225
精华内容 79,690
关键字:

关系可以嵌套定义