标签: static-members

C++:静态成员函数和变量 - 静态变量的重新定义?

我试图将Singleton设计模式合并到我的代码中,但我开始遇到一个奇怪的错误:

main.obj : error LNK2005: "private: static class gameState * gameState::state" (?state@gameState@@0PAV1@A) already defined in gameState.obj
Run Code Online (Sandbox Code Playgroud)

如果您不熟悉单例模式,它基本上只用于在整个程序中强制执行某个对象的1个实例.以下是相关代码:gameState.h:

class gameState
{
public:
static gameState* Instance() {return state;}
.
.
.
private:
gameState();
    static gameState* state;
};
gameState* gameState::state = new gameState();
Run Code Online (Sandbox Code Playgroud)

现在我只是在main.cpp文件中使用该对象的实例:

gameState *currState = gameState::Instance();
.
.
.
for_each(currState->getHumanPieces().begin(),currState->getHumanPieces().end(), drawPieces);
Run Code Online (Sandbox Code Playgroud)

看起来我试图重新定义gameState :: state,但无法弄清楚为什么......帮助任何人?

解决了这个问题,但仍然存在一个错误,我之前并没有真正发布,因为我认为它只是另一个错误的一部分:

error LNK2019: unresolved external symbol "private: __thiscall gameState::gameState(void)" (??0gameState@@AAE@XZ) referenced in function "void __cdecl `dynamic initializer for 'private: static class gameState * gameState::state''(void)" (??__E?state@gameState@@0PAV1@A@@YAXXZ)
Run Code Online (Sandbox Code Playgroud)

关于如何解决这个问题的任何好的提示?

谢谢你们两位,修好了:D

c++ static-members redefinition

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

PHP:扩展静态成员数组

我有以下情况:

class A { public static $arr=array(1,2); }
class B extends A { public static $arr=array(3,4); }
Run Code Online (Sandbox Code Playgroud)

有没有什么办法,以这2个阵,因此结合B::$arrIS 1,2,3,4

我不需要改变这些数组,但我不能声明它们是als const,因为PHP不允许使用const数组./sf/ PHP手册指出,我只能分配字符串和常量,因此parent::$arr + array(1,2)不起作用,但我认为应该可以这样做.

php inheritance static-members

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

由于使用静态变量而导致未定义的引用错误

我今天早些时候提出了一个关于单身人士的问题,我在理解遇到的一些错误时遇到了一些困难.我有以下代码:

Timing.h

class Timing {

public:
    static Timing *GetInstance();
private:
    Timing();
    static Timing *_singleInstance;
};
Run Code Online (Sandbox Code Playgroud)

Timing.cpp

 #include "Timing.h"

 static Timing *Timing::GetInstance() {  //the first error
    if (!_singleInstance) {
        _singleInstance = new Timing();  //the second error
    }
    return _singleInstance;
}
Run Code Online (Sandbox Code Playgroud)

这段代码中有两个错误,我无法弄清楚.

  1. 该方法GetInstance()在标头中声明为static.为什么在cpp文件中我必须省略这个词static?它给出了错误:"无法声明成员函数'静态时序*Timing :: GetInstance()'具有静态链接".写它的正确方法是:

    Timing *Timing::GetInstance() { ... }  
    
    Run Code Online (Sandbox Code Playgroud)
  2. 为什么我不能写_singleInstance = new Timing();?它给出了错误:"对Timing :: _ singleInstance的未定义引用".我通过_singleInstance在cpp文件中定义为全局变量来解决此错误.

c++ static static-members

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

Swing中静态成员的排序是否敏感?

我有这个课,比方说Foo.它extends JFrame是一个单身人士.话虽如此,它有两个静态字段:1)Foo和2 的实例a Color.

这是一段代码片段Foo:

public class Foo extends JFrame{
    private static final Color FOO_RED = new Color(155, 64, 69);
    private static final Foo INSTANCE = new Foo();

    private Foo(){
        //do stuff
    }

    public static Foo getInstance(){
        return INSTANCE;
    }
}
Run Code Online (Sandbox Code Playgroud)

我还有另一堂课,比方说Launcher.这是负责启动应用程序的主类.这是一个简单的类,它唯一的工作就是将构造任务委托FooEDT.

这是一段代码片段Launcher:

public class Launcher{
    public static void main(String[] args){
        SwingUtilities.invokeLater((new Runnable(){
            @Override
            public void run()
            {
                Foo.getInstance(); …
Run Code Online (Sandbox Code Playgroud)

java singleton swing static-members

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

c ++中的静态成员错误

我试图在C++中定义一个静态成员指针.但是我收到链接器错误.错误是

1>main.obj : error LNK2001: unresolved external symbol "public: static class Activity * * Solution::temp" (?temp@Solution@@2PAPAVActivity@@A)

1>Solution.obj : error LNK2001: unresolved external symbol "public: static class Activity * * Solution::temp" (?temp@Solution@@2PAPAVActivity@@A)
Run Code Online (Sandbox Code Playgroud)

码:

class Solution{

public:
    Activity **solution;

    Solution();
    Solution(Activity **list, bool direction);
    static Activity** temp;
};
Run Code Online (Sandbox Code Playgroud)

活动是另一个类.我怎么解决这个问题?

c++ static-members

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

调用静态函数时c ++ globlal/stack实例ctor/dtor崩溃

我有一个在main的同一个文件中定义的类,另一个类(完整的静态函数/成员)在2个单独的文件中定义,它崩溃了.我想这可能与全局/静态实例的生命周期有关.似乎在ctor中,静态成员尚未初始化,并且可能发生在退出时,静态成员在第一个实例被销毁之前被释放.这是测试代码:

    //testh.h
    #include <map>
    class Sc {
    public:
        static void insert();
        static void out();

    private:
        static std::map<int, int> map_;
    };

    //testcpp.cpp
    #include "testh.h"
    #include <iostream>
    std::map<int, int> Sc::map_;

    void Sc::insert() {
        map_.insert(std::make_pair(2,3));
    }

    void Sc::out() {
        for(auto m : map_) {
            std::cout << m.first << ' ' << m.second << '\n';
        }
    }

    //main.cpp
    #include "testh.h"
    class Nc {
    public:
        Nc() {
            Sc::insert();
            Sc::out();
        }
        ~Nc() {
            Sc::insert();
            Sc::out();
        }
    };

    Nc nc;
    int main() {

        system("pause");
        return 0;
    } …
Run Code Online (Sandbox Code Playgroud)

c++ static-members

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

如何解决这个静态字段名冲突?

我正在写一个Android应用程序,我刚刚创建了一个类.

public class ClassA {
    private static int aNumber;
    public static void setANumber (int aNumber) {
        //set the field
    }

    public static int getANumber () {
        return aNumber;
    }
}
Run Code Online (Sandbox Code Playgroud)

如您所见,我无法设置该aNumber字段,因为它与参数具有相同的名称.如果它是一个实例字段,我可以使用this.但这是一个静态领域!有没有办法实现与this静态字段的关键字相同?我真的需要更改参数名称吗?

java static static-members

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

通用类中的静态列表

我有以下代码(一个更复杂项目的简单示例),其中我有一个对象类型列表的静态"主"列表.

如果您单步执行代码,我希望通过构造函数创建第二个referenceManager3类型时,_masterList将包含String和Object列表.但事实并非如此.

我假设这是因为ReferenceManager3的每个实例实际上是不同的类类型,因为泛型类型定义.我认为这是正确的吗?

我怎样才能做到这一点?

class Program
{
    static void Main(string[] args)
    {
        ReferenceManager3<string> StringManager = new ReferenceManager3<string>();
        ReferenceManager3<object> IntManager = new ReferenceManager3<object>();
    }
}

class ReferenceManager3<T> where T : class //IReferenceTracking
{
    // Static list containing a reference to all Typed Lists
    static List<IList> _masterList = new List<IList>();

    // Object Typed List
    private List<T> _list = null;

    public ReferenceManager3()
    {
        // Create the new Typed List
        _list = new List<T>();

        // Add it to the Static Master List
        _masterList.Add(_list); // …
Run Code Online (Sandbox Code Playgroud)

c# generics static-members

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

请首先实例化QApplication对象

我有一个静态类,希望它有静态QSettings.但是在初始化时我得到一个警告:

QSettings* MySQLConnection::settings = new QSettings(QApplication::applicationDirPath() + "/config.ini", QSettings::IniFormat);
Run Code Online (Sandbox Code Playgroud)

QCoreApplication :: applicationDirPath:请首先实例化QApplication对象

作为一种解决方法,我QSetting在主函数的开头手动初始化.有没有更好的方法来初始化我的静态成员?

谢谢!

c++ qt static-members qcoreapplication qapplication

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

使用内联静态数据成员的任何潜在缺陷?

C++ 17引入了内联变量,并且可以使用初始化程序在类定义中定义内联静态数据成员.它不需要一个类外的定义.例如,

struct X {
  inline static int n = 1;
};
Run Code Online (Sandbox Code Playgroud)

鉴于此,我认为没有理由不总是使用内联静态数据成员,以获得简洁的语法.这样做的任何陷阱?请注意,我不介意慢速编译.

c++ inline static-members c++17 inline-variable

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