Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C+中使用extern+;动态链接库_C++_Windows_Dll_Static_Extern - Fatal编程技术网

C++ 在C+中使用extern+;动态链接库

C++ 在C+中使用extern+;动态链接库,c++,windows,dll,static,extern,C++,Windows,Dll,Static,Extern,我声明,然后在DLL中实例化一个静态变量 // DLL.h class A { //... }; static A* a; // DLL.cpp A* a = new A; 到目前为止,一切都很好。。。有人建议我使用extern而不是static extern A* a; // in DLL.h 这没有问题,但是必须在某个地方声明extern变量。我得到了无效的存储类成员 换句话说,我以前做的是在源文件中声明一个变量,如下所示: // In src.cpp A a; 然后

我声明,然后在DLL中实例化一个静态变量

// DLL.h
class A
{
    //...
};

static A* a;



// DLL.cpp
A* a = new A;
到目前为止,一切都很好。。。有人建议我使用
extern
而不是
static

extern A* a; // in DLL.h
这没有问题,但是必须在某个地方声明
extern
变量。我得到了无效的存储类成员

换句话说,我以前做的是在源文件中声明一个变量,如下所示:

// In src.cpp
A a; 
然后
extern
在同一项目的另一个源文件中声明它:

// In src2.cpp
extern A a;
因此,它在链接时是同一个对象。也许这不是正确的做法

那么,在哪里声明现在是extern的变量呢

请注意,我使用静态声明是为了在加载dll后立即查看实例化的变量


请注意,当前使用的
static
大部分时间都有效,但我认为在变量实例化中观察到延迟或类似情况,而它应该始终在加载时实例化。我正在调查这个问题一个星期了,我找不到任何解决办法。

无论哪种方式,这都是一种可怕且不安全的单身方式。使用私有静态变量和函数访问它。例如(我从来没有见过在C++中使用
extern
)嗯,实际上,这并不是我处理单例的方式。。。但我们必须为特定的目的编写代码。无论如何,我想我的问题不会用这些问题来解决。这可能比我在这里解释的要复杂得多。无论如何,谢谢你。