标签: nested-class

包括嵌套类

我有一个带有几个迭代器的容器类作为嵌套类.结构是这样的:

class Grid
{
protected:
    class Iterator
    {
        Iterator(Grid* g) : grid(g){}
        Grid* grid;
    }
    class MoreIterator : public Iterator
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我想将迭代器移动到自己的头文件中,以清理容器代码.

class Grid
{
protected:
#include "griditerators.h"
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,这编译没有错误.但:

在QtCreator中排队

Iterator(Grid* g) : grid(g){}
Grid* grid;
Run Code Online (Sandbox Code Playgroud)

被标记为错误,告诉我"网格不是类型名称".

我以为我可以通过griditerator.h文件中的前向声明来解决这个问题:

class Grid;
class Iterator
{
    Iterator(Grid* g) : grid(g){}
    Grid* grid;
}
Run Code Online (Sandbox Code Playgroud)

但这给了我一个编译错误:类Grid与声明它的类具有相同的名称.

用#include"grid.h"替换前向声明.但我不知何故认为这很难看.

所以我有两个工作选择.一个显示我的IDE中的丑陋错误,另一个我不喜欢那么多.

我尝试了其他变体,其中include不在封闭类中,但由于不同的原因而无法编译.

所以我的问题是:是否有任何"最佳实践"或包含模式来处理太大而无法将它们保存在封闭类文件中的嵌套类?

例如,有没有办法声明一个嵌套类,如:

class Grid::Iterator
Run Code Online (Sandbox Code Playgroud)

c++ nested-class

1
推荐指数
1
解决办法
1940
查看次数

在ArrayList中创建ArrayList

因此,对于我正在处理的程序,我正在尝试创建一个解析文本文件的方法.使用文本文件中的值,创建一个ArrayListArrayList.到目前为止,这是我的代码:

public ArrayList<ArrayList<String>> getRels(String relsFile)
{
   String[] currentId;
   int i = -1;

   ArrayList<ArrayList<String>> relsList = new ArrayList<ArrayList<String>>();
   relsList.add(new ArrayList<String>());

   try
   {
      // Open the file that is the first 
      // command line parameter
      FileInputStream fstream = new FileInputStream(relsFile);
      BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
      String strLine;

      while ((strLine = br.readLine()) != null)
      {
         // Add values to array list
         currentId = strLine.split(",");
         relsList.get(++i).add(currentId[0]);
         //???????????          
      }   
      //Close the input stream
      in.close();
   }        
   catch (Exception e)
   {
      System.err.println("Error: …
Run Code Online (Sandbox Code Playgroud)

java nested arraylist nested-class text-files

1
推荐指数
1
解决办法
4184
查看次数

PHP - 类声明可能不是嵌套的

我在cakephp中有一个项目,当我打电话给供应商使用AES解密字符串时,我得到错误:

Fatal error: Class declarations may not be nested in /var/www/html/myproject/cake/libs/log/file_log.php on line 30
Run Code Online (Sandbox Code Playgroud)

这是我的控制器中的代码:

App::import('vendor', 'aes', array('file' => 'AES/AES.php'));
$aes = new AesCtr();
$decrypted = $aes->decrypt($encrypted, "mykey", 128);
Run Code Online (Sandbox Code Playgroud)

这是供应商的一部分(一个名为AES.php的文件):

class Aes {
//....Methods
}

class AesCtr extends Aes {

  public static function decrypt($ciphertext, $password, $nBits) {
  //....Method Logic
  }

  //....Other methods

}
Run Code Online (Sandbox Code Playgroud)

我已经阅读了这里给出的解释:PHP嵌套类工作......有点? 但我没有太多的PHP经验,也无法通过他们展示的"hacky方式"来解决这个问题.

任何帮助表示赞赏.如果需要更多信息,请告诉我.

UPDATE类Aes和AesCtr(两者都在文件AES.php中).

<?php
/* - - - - - - - - - - - - - - - - - - - - …
Run Code Online (Sandbox Code Playgroud)

php cakephp aes nested-class

1
推荐指数
1
解决办法
1万
查看次数

模板化类嵌套类型typename

我要声明的Itertypename,但没有typedef.
然后,我不能Iter在我的template class声明中使用=>令人沮丧:(请教
我如何使用Iter,或者解释我为什么C++如此讨厌 ......

template <typename T>
struct MyContainer
{
  typedef  std::vector<T>  Vec;
  typename Vec::iterator   Iter;

  void Fo (typename std::vector<T>::iterator);  //ok
  typename std::vector<T>::iterator Ba();       //ok

  void Foo (Iter);   //error: 'Iter' is not a type
  Iter Bar ();       //error: 'Iter' does not name a type
};                   //(gcc 4.1.2)
Run Code Online (Sandbox Code Playgroud)
  1. 为什么typedef不能用来申报Iter?为什么不?
  2. 如何使用Itertemplate class?(例如作为函数参数类型)

编辑
在指令中typename Vec::iterator Iter;,关键字typename表示 …

c++ templates typedef nested-class typename

1
推荐指数
1
解决办法
1177
查看次数

为什么要使用与它们相同类型的当前类的变量?

我刚刚找到一个Java示例,它使用类型为当前类本身的变量.我无法理解为什么以及何时使用这样的东西!这本书的作者没有解释它,因为它只是关于其他东西的一个例子的代码的一部分!谁能帮助我理解这种方法的实用性?它与"单身设计模式"有关吗?此外,我也试图实例化test1,test2但我得到一个错误!

public class Test {
    public Test() {
        Test test1;
        Test test2;
    }
}
Run Code Online (Sandbox Code Playgroud)

原始代码段是关于嵌套类的:

public class Tree {

    ExampleNode master;

    public Tree() {
    }

    //...
    class ExampleNode {
        ExampleNode rightNode;
        ExampleNode leftNode;

        //...
        void printMaster() {
            System.out.println( master );
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

java linked-list nested-class

1
推荐指数
1
解决办法
68
查看次数

嵌套类和继承C++

这是一个奇怪的问题,但我使用嵌套类在c ++中创建类似属性的功能.我还通过使嵌套类的赋值运算符受到保护以及嵌套类的主机类a使这些工作成为ReadOnly Friend.不幸的是,似乎任何继承类(with : public BaseClass)仍然无法访问嵌套类的赋值运算符.

我不知道它是否重要,但我确实把它放在Friend了课堂的公共部分.

有谁知道如何解决这个问题?(或者破解它)谢谢

编辑:添加了代码示例

#define ReadOnlyProperty(type,name,parent) \
protected: \
class name : public PropertyBase<type> \
{ \
    parent* This; \
public: \
    friend class parent; \
    name(parent* instance) { This = instance; } \
protected: \
    void operator=(type value) {Set(value);} \
    void Set(type value); \
    type Get() const; \
}; \
public: name name; \
friend class name; \
private:
Run Code Online (Sandbox Code Playgroud)

基类:

class Object
{
ReadOnlyProperty(char,Type,Object);

public:

Object() : Type(this) {}
}; …
Run Code Online (Sandbox Code Playgroud)

c++ inheritance nested-class

1
推荐指数
1
解决办法
2754
查看次数

编译器和运行时系统如何处理java中的嵌套类型?

编译器如何知道嵌套类型,如:

  • 嵌套的内部类
  • 匿名课
  • 嵌套接口

.....等等

需要清晰.......

java jvm anonymous-inner-class anonymous-class nested-class

1
推荐指数
1
解决办法
90
查看次数

为什么静态嵌套类不能访问外部类的"this"指针?

在此输入图像描述

困扰我的是第二点.

我认为这可能与"this"指针不是静态的事实有关,因此内部类无法访问它.我不确定这是否是正确的解释.

这也为我提出了另一个问题,即"这个"指针定义在哪里?

java class nested-class static-classes

1
推荐指数
1
解决办法
1042
查看次数

UVM是否支持嵌套/内部类?

我们的验证环境的代码指南是每个文件一个类.

有时a uvm_object只需要另外1个uvm_component,因此,遵循面向对象的理论,我们应该使用嵌套/内部类.

SystemVerilog完全支持嵌套类.但是,他们是否受到UVM的支持?

是否可以编译如下所示的内容:

class inception_level_1 extends uvm_test;

  `uvm_component_utils(inception_level_1)

  function new(string name = "inception_level_1", uvm_component parent = null);
    super.new(name, parent);
  endfunction

  class inception_level_2 extends uvm_object;

    int a;

    `uvm_object_utils_begin(inception_level_2)
      `uvm_field_int(a, UVM_DEFAULT)
    `uvm_object_utils_end

    function new(string name = "inception_level_2");
      super.new(name);
    endfunction

  endclass

endclass
Run Code Online (Sandbox Code Playgroud)

目前上面的代码给出了编译错误:

** Error: testbench.sv(20): (vlog-2889) Illegal to access non-static method 'uvm_report_warning' outside its class scope.
Run Code Online (Sandbox Code Playgroud)

完整的代码示例:http://www.edaplayground.com/x/3r8

nested-class inner-classes system-verilog uvm

1
推荐指数
1
解决办法
1230
查看次数

如何在C++中从嵌套类调用变量

所以我的代码有点像这样

class foo1
{
    public:
        foo1()
        {
            a = "text";
        }

        void getString()
        {
            return a;
        }
    private:
        string a;
};

class foo2
{
    public:
        foo2()
        {
            foo3 boo3;
        }
        class foo3
        {
            public:
                foo3()
                {
                    foo1 boo1;
                }
            private:
                foo1 boo1;
        };
    private:
};

int main()
{
    foo2 object;
    cout << /* ??? */ ;
}
Run Code Online (Sandbox Code Playgroud)

首先,类中的代码结构是否存在任何问题,其次,我应该在注释的位置放置在int main()中初始化的foo2对象中显示字符串a?

c++ class object nested-class c++11

1
推荐指数
1
解决办法
60
查看次数