在浏览一些源代码时,我遇到了这样的函数:
void someFunction(char someArray[static 100])
{
// do something cool here
}
Run Code Online (Sandbox Code Playgroud)
通过一些实验,似乎其他限定符也可能出现在那里:
void someFunction(char someArray[const])
{
// do something cool here
}
Run Code Online (Sandbox Code Playgroud)
似乎只有[ ]在将数组声明为函数的参数时才允许使用限定符.这些怎么办?为什么功能参数不同?
我想使数组静态,并希望在其他翻译单元中引用它.然后我将其定义为static int array[100] = {...},并在其他翻译单元中声明为extern int array[].但编译器告诉我静态和外部的存储类相互冲突,我怎么能通过它仍然达到我的目标?
我正在遵循这个单例模式,为什么错误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 …