相关疑难解决方法(0)

如何在仅头文件库中拥有静态数据成员?

在非模板库类中拥有静态成员的最佳方法是什么,而不必在类用户上承担定义成员的负担?

说我想提供这个课程:

class i_want_a_static_member
{
    static expensive_resource static_resource_;

public:
    void foo()
    {
        static_resource_.bar();
    }
};
Run Code Online (Sandbox Code Playgroud)

那么类的用户一定不要忘了某处定义静态成员(如已经回答了 很多 ):

// this must be done somewhere in a translation unit
expensive_resource i_want_a_static_member::static_resource_;
Run Code Online (Sandbox Code Playgroud)

我在下面有一个答案,但它有一些缺点.是否有更好和/或更优雅的解决方案?

c++ static-members header-only

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

从静态函数访问静态变量

我的函数是静态的非常重要,我需要访问和修改另一个静态/非静态类成员,以便以后打印出来.我怎样才能做到这一点?

  • 课程已启动
  • 构造函数使用必须是静态的内部函数将变量设置为某些内容
  • 一段时间后我打印出那个变量

示例代码

#include <iostream>

class MyClass
{
public:
    static int s;
    static void set()
    {
        MyClass::s = 5;
    }

    int get()
    {
        return MyClass::s;
    }

    MyClass()
    {
        this->set();
    }
};

void main()
{
    auto a = new MyClass();

    a->set(); // Error

    std::cout << a->get() << std::endl; // Error

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

错误

LNK2001: unresolved external symbol "public: static int MyClass::s" (?s@MyClass@@2HA)
LNK1120: 1 unresolved externals
Run Code Online (Sandbox Code Playgroud)

c++ oop static class

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

访问静态变量时未解析的外部符号

class CommandManager {

public:
    void sendText(std::string command);
    static bool CommandManager::started;

private:


    bool parseCommand(std::string commands);

    void changeSpeed(std::vector<std::string> vec);
    void help(std::vector<std::string> vec);
};
Run Code Online (Sandbox Code Playgroud)

这是客户端代码:

CommandManager::started = true;
Run Code Online (Sandbox Code Playgroud)

将这两个文件链接在一起我得到:

1> UAlbertaBotModule.obj:错误LNK2001:未解析的外部符号"public:static bool CommandManager :: started"(?started @ CommandManager @@ 2_NA)

1> C:\ Development\School\cmput350-uofabot\UAlbertaBot\vs2008\Release\UAlbertaBot.dll:致命错误LNK1120:1个未解析的外部

我在哪里错了?

c++ linker-errors

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

如何从主应用程序获取GetInstance的引用?

我正在遵循这个单例模式,为什么错误LNK2001:在这种情况下未解析的外部符号?我的问题看起来很相似,但我的问题不在于静态实例的定义.我的问题是从另一个类解析静态GetInstance()定义.

我的错误似乎不同,或以前的答案是不充分的.我已经尝试过这样的建议,"你需要在课堂外定义s_instance"这对我来说是没有意义的cpp noob.我在标题中声明静态,并在cpp中定义它们的实现.

我也不需要关于单例的线程安全的讲座,处理程序绑定使用信号2 ...

State.h

class State
{   
public: 
    State(void);
    ~State(void);

    static State* instance; 
    static State* GetInstance(); 
... 

};
Run Code Online (Sandbox Code Playgroud)

State.cpp

State::AppState mCurrentState;
boost::signals2::signal<void ()> mSignal;


State* instance = NULL;
State* GetInstance()
{
    if( instance == NULL)
    {
        instance = new State();
        return instance;
    }
    else
    {
        return instance;
    }
}
Run Code Online (Sandbox Code Playgroud)

所有这些都很好.然后当我尝试访问这样的单例时 State *state = State::GetInstance();,我得到"未解析的外部符号"错误.

错误LNK2019:未解析的外部符号"public:static class State*__cdecl State :: GetInstance(void)"(?GetInstance @State @@ SAPAV1 @ XZ)在函数"public:virtual void __thiscall MesherApp :: setup(void)"中引用(?设置@ MesherApp …

c++ singleton static compilation

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

在MyClass中使用静态std :: map <int,MyClass*>会导致外部符号无法解析

我想跟踪实例MyClass,所以我std::map<int,MyClass*>在MyClass中添加了一个私有静态变量.现在的问题是它导致未解析的外部符号,我不知道如何调试.我该如何解决这个问题?

注意:我是一名经验丰富的Java程序员和新手C++程序员,我也会将其作为一个JNI dll,这就是我需要跟踪实例的原因MyClass.

c++

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