标签: static-variables

如何从C中的另一个文件访问静态变量?

可能重复:
静态变量

如何从C中的另一个文件访问静态变量?由于静态变量具有文件范围,我认为我们无法在文件外访问它.但我仍然觉得可能有一些技巧或方法来做同样的事情.

c static-variables

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

C 库的 C++ 包装器

最近我发现了一个我想在我的 C++ 项目中使用的 C 库。该代码配置了全局变量,并将其输出写入静态指针指向的内存。当我执行我的项目时,我希望运行 2 个 C 程序实例:一个具有配置 A,一个具有配置 B。我不能运行我的程序两次,所以我认为有 2 个选项:

  • 创建一个C++ 包装器:这里的问题是包装器类应该包含 C 库拥有的所有全局/静态变量。由于 C 库中的函数使用这些变量,我必须为这些函数创建非常大的参数列表。
  • 复制粘贴C 库:在这里,我必须调整 C 库中每个函数和每个变量的名称。

哪一种是最快的解决方案?是否有其他可能性来运行同一 C 源代码的 2 个实例?

谢谢,

最大限度

c c++ global-variables static-variables wrapper

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

我是否以正确的方式使用静电?

我正在编写一个XNA引擎,我将所有模型存储在一个List.为了能够在整个引擎中使用它,我已经做了这个,public static List<Model>所以我可以从我开发的任何新类访问它.它当然使获得模型列表真的很容易获得,但这是正确的用法吗?或者我会更好地在方法声明中传递变量?

c# xna static-variables

5
推荐指数
2
解决办法
1301
查看次数

在类之外声明一个新的静态变量

有没有办法在该类之外声明新的静态变量,即使它没有在类中设置?

// Using this class as a static object.
Class someclass {
    // There is no definition for static variables.
}

// This can be initialized
Class classA {
    public function __construct() {
        // Some codes goes here
    }
}

/* Declaration */
// Notice that there is no static declaration for $classA in someclass
$class = 'classA'
someclass::$$class = new $class();
Run Code Online (Sandbox Code Playgroud)

如何做呢?

谢谢您的建议。

php declaration static-variables

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

C++ 类方法继承

我最近从 Java 过渡到 C++,在弄清楚类继承的确切工作原理方面遇到了一些困难。目前,我有班级Weapon和班级MinigunMinigun继承该类Weapon,这意味着它应该具有定义的方法和变量Weapon。我的问题是,我有一个名为 的私有常量 static int Weaponrate以及一个返回名为 的整数的公共方法getRate()getRate()只是返回类中定义的速率变量。当Minigunextends Weapon,并且我在 inside 设置速率时Minigun,该getRate()方法仍然从类返回常量Weapon,即使它是在Minigun类上调用的。我认为它会像Java一样,继承的方法将使用内部修改的变量Minigun。目前我必须做以下事情;

武器.h

#ifndef __WEAPON__
#define __WEAPON__

class Weapon
{
    public:
        virtual int getRate()
        {
            return rate;
        }
    private:
        const static int rate = 0;
};

#endif
Run Code Online (Sandbox Code Playgroud)

迷你枪.h

#include "Weapon.h"

#ifndef __WEAPON_MINIGUN__
#define __WEAPON_MINIGUN__

class Minigun: public Weapon
{
public: …
Run Code Online (Sandbox Code Playgroud)

c++ methods inheritance constants static-variables

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

如何在静态变量和块之间执行执行顺序?

考虑以下场景:
代码:1

public class StaticDemo {
    static{
        b=5;
        System.out.println("Static B:"+b);/*Compilation error:"Cannot reference a field before it is defined"*/
    }
    static int b;
    static{
        System.out.println("B:"+b);
    }
    public static void main(String[] args) {    
    }
}
Run Code Online (Sandbox Code Playgroud)

注释下面的代码,没有错误,并且显示了以下输出.
代码:2

public class StaticDemo {
    static{
        b=5;
        //System.out.println("Static B:"+b);
    }
    static int b;
    static{
        System.out.println("B:"+b);
    }
    public static void main(String[] args) {    
    }
}
Run Code Online (Sandbox Code Playgroud)

输出 -

B:5
Run Code Online (Sandbox Code Playgroud)

如果执行基于静态变量或块的写入顺序.

  1. 为什么初始化(b=5)没有抛出编译错误,如代码所示:2.

  2. 并且还请解释为什么Code:1抛出错误,如果Code:2为真?

java static scope static-block static-variables

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

使用静态函数变量vs类变量来存储某些状态

可以说我有这样的功能:

void processElement() {
    doSomething(someArray[lastProcessedElement + 1]);
}
Run Code Online (Sandbox Code Playgroud)

问题是,每次调用此函数时,我都需要存储我调用doSomething的最后一个元素.所以在这里我有两个选择:

  • 我可以创建一个名为lastProcessedElement的私有类变量,并在每次调用该函数时递增它的值.这种方法似乎最常见.所以代码可以是这样的:

    class Foo {
        int lastProcessedElement = 0;     
    
        public:  
        void processElement() {
            doSomething(someArray[++lastProcessedElement]);
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • 作为第二个选项,我可以在函数中创建一个静态变量并每次递增它:

    // Class is not important here, so the function is:
    void processElement() {
        static int lastProcessedElement = 0;
        doSomething(someArray[++lastProcessedElement]);
    }
    
    Run Code Online (Sandbox Code Playgroud)

第一个解决方案增加了一些我不想要的复杂性.我喜欢把东西放在原地.

我知道第二个解决方案只有在该类只有一个实例时才有效.

那么使用静态变量法是一个很好的解决方案?是否有多实例类的在线解决方案?(可以有一个解决这个特定的数组元素索引的东西,但我刚刚做了,我说的是为函数的下一次调用存储一些值)

c++ static-variables class-variables

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

在覆盖派生类中的静态字段时,"...错误地扩展了基类静态端"错误

覆盖派生类中的静态字段会导致

错误TS2417:构建:类静态端'typeof TDerived'错误地扩展了基类静态端'typeof TBase'.

这是一个合法的错误案例吗?

class TBase
{
  private static s_field = 'something';

  public constructor() {}
}

class TDerived extends TBase
{
  private static s_field = 'something else'; // commenting this line fixes error

  public constructor()
  {
    super();
  }
}
Run Code Online (Sandbox Code Playgroud)

那我该怎么处理静态字段呢?现在唯一的解决方法是将类名添加到每个静态字段名称,这是一个非常难看的解决方案.

private static TBase_s_field = 'something';
...
private static TDerived_s_field = 'something else';
Run Code Online (Sandbox Code Playgroud)

ps使用typescript 2.0.3

inheritance static-variables typescript

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

c ++ 17:仅标题:类静态变量错误

从C++ 17开始,我一直在尝试更简单的方法来获取类静态变量.我正在写一个仅限标题的库.显然inline,变量的新含义适用于此.

class thingy {
    static inline reporter rep;
};
Run Code Online (Sandbox Code Playgroud)

但我一直在收到运行时错误.

我正在使用Visual Studio 15.6.4

要测试,以下内容:

  • thingy 有一个静态成员变量
  • 该成员告诉您何时构建/破坏以及在何处
  • 应该构造和破坏一次
  • #include是否包含在两个.cpp文件中

foo.h中

#pragma once

#include <iostream>

using namespace std;

struct reporter {
    reporter() {
        cout << "reporter() - " << this << endl;
    }
    ~reporter() {
        cout << "~reporter() - " << this << endl;
    }
};

class thingy {
    static inline reporter rep;
};
Run Code Online (Sandbox Code Playgroud)

main.cpp中

#include "foo.h"
int main() {}
Run Code Online (Sandbox Code Playgroud)

Foo.cpp中

#include "foo.h"
Run Code Online (Sandbox Code Playgroud)

最令人失望的是,它打印出来:

reporter() - 00007FF670E47C80
reporter() …
Run Code Online (Sandbox Code Playgroud)

c++ static-variables visual-c++ c++17

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

带有调试器的 kotlin 伴随对象字段

我在伴生对象中声明了一个字段,因此它将在伴生对象中的函数中知道。

像这样:

class ProgramStructure {
  companion object {
      var index = 0
      fun inc(){
          index++
      }
  }
}
Run Code Online (Sandbox Code Playgroud)

一切正常,但是当我调试它时,我看不到“索引”的值。我怎样才能看到价值?

谢谢

debugging intellij-idea static-variables kotlin

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