我有很多必須用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