我有很多必须用C++编写的C#代码。我没有太多的C++经验。什么是C++中的C#静态实例的等价物?
我正在使用Visual Studio 2012来构建。该项目是一个静态库,位于C++(不在C++/CLI中)。
在C#代码不存在用于一些静态实例创建了一个类
C#
namespace MyNamespace
{
public class MyClass
{
//Class Code
static public MyClass Instance1 = new MyClass(/*parameters*/);
static public MyClass Instance2 = new MyClass(/*other parameters*/);
我需要做用C类似++,到目前为止我:
C++
namespace MyNamespace
{
class MyClass
{
//Class Code
}//end of class
static MyClass& Instance1 = MyClass(/*parameters*/);
static MyClass& Instance2 = MyClass(/*other parameters*/);
}//end of Namespace
但是,从我读的这个不完全相同,通过添加单词“静态”我所做的是我的Instance1和Instance2只在当前文件的范围内可见。它是否正确?
所以我不想要一堆Instance1,我只想在整个程序中使用一个。 我读到,而不是使用静态,我可以使用extern,它告诉编译器该变量的定义是在另一个文件,因此我会结束只有一个Instance1和Instance2的实例,而不是多个。
所以,我想:
C++ MyClass.h
extern MyClass& Instance1;
extern MyClass& Instance2;
C++ MyClass.cpp
MyClass& Instance1 = MyClass(/*parameters*/);
MyClass& Instance2 = MyClass(/*other parameters*/);
这建立就好了,但是当我尝试运行我的测试,他们会抛出一个错误:
Failed to set up the execution context to run the test
使用的extern我的测试之前跑就好了,但是当我添加它,他们将无法正常工作。这导致我相信我没有正确地声明事情,或者Visual Studio 2012不能正确支持某些功能?
有一个问题,你做静态MyClass realInstance,有哪里我应该初始化我的istance没有? – Dzyann
是的,你的意思是'静态MyClass realInstance(参数);'。 – Jack
如果您在cpp中创建实例,但在Instance()方法之外创建实例?它会是一样的吗? – Dzyann