Possible Duplicate:
C++: undefined reference to static class member克++未定義參考靜態成員變量
我編譯此使用g ++以及一個生成文件。在G ++版本是4.1.2 20080704.
下面是簡化的代碼仍然包含錯誤:
#ifdef __cplusplus
extern "C"
{
#endif
class MyClass
{
public:
MyClass() {};
MyClass& operator=(MyClass&);
static MyClass& instance() { return log; };
private:
static MyClass log;
};
//MyClass MyClass::log;
int main()
{
MyClass& myClass = MyClass::instance();
return 0;
}
#ifdef __cplusplus
} //extern "C"
#endif
當我與「G ++ MyClass.cpp」我得到這個錯誤: 「編譯功能MyClass :: Instance()':MyClass.cpp:'未定義的引用MyClass :: log
如果我用'g ++ MyClass.cpp -c'編譯它構建目標文件,但鏈接該文件會導致相同的錯誤在鏈接期間,我嘗試在類定義之後用「MyClass MyClass :: log;」定義靜態變量,但由於它使用C編譯,所以我不認爲t帽子會工作。它給出了一個錯誤消息「與C鏈接的新定義的C++鏈接衝突」
我不知道如何解決這個問題,我幾天來一直在反對這個問題。任何幫助是極大的讚賞。
額外背景資料:
這源自最初的CPP文件包含「必須使用C函數的語法Simulink中定義的函數。」我想盡可能少地改變現有的代碼。我不是C程序員,所以我對這裏的理解有限。我知道這些函數正在與simulink一起使用,並且所有內容都是在matlab編譯器中編譯的。我們試圖導出創建的simulink,以便我們可以將它集成到另一個程序中,但這是我們編譯的許多問題之一。希望這提供了一些更好的背景資料
爲什麼你會嘗試在第一個地方給C類聯繫..? – ildjarn
源自此的原始cpp文件包含「必須使用C函數語法的Simulink定義函數」。我想盡可能少地改變現有的代碼。我不是C程序員,所以我對這裏的理解有限。我知道這些函數正在與simulink一起使用,並且所有內容都是在matlab編譯器中編譯的。我們試圖導出創建的simulink,以便我們可以將它集成到另一個程序中,但這是我們編譯的許多問題之一。希望能給出一些更好的背景信息。 – Spencer
這不是一個重複的問題 - extern「C」連接的問題是新的。投票重新開放。 – TonyK