2012-08-15 69 views
0

我對cpp相當陌生,但一直在c#中。我試圖運行一個簡單的控制檯應用程序,但我收到這個LNK2001錯誤消息。C++錯誤LNK2001問題

我有main.cpp,並添加了另一個類,Zeus,文件,Zeus.h和Zeus.cpp。

下面是main.cpp中:

#include "Zeus.h" 
#include <iostream> 

int main() 
{ 
    Zeus::tick = 25.0; 
    using std::cout; 
    cout << "nothing"; 
} 

這裏是Zeus.h:

static class Zeus 
{ 
public: 
    static void testing(void); 
public: 
    static double tick; 
}; 

這裏是Zeus.cpp:

void Zeus::testing(void) 
{ 
//Doesnt get this far 
//But eventually something like 
// cout << "test " << Zeus::tick; 

} 

這裏是錯誤消息:

錯誤20 er ROR LNK2001:無法解析的外部符號「公用:靜態雙宙斯::滴答」

感謝,

+0

很好,好像你無處定義「嘀」,至少不會在你向我們展示了代碼 – PlasmaHH 2012-08-15 16:00:20

+0

可以在中期功能'使用std ::法院任何評論'聲明?這個位置是否鼓勵? – Derek 2012-08-15 16:02:56

回答

1

您需要定義Zeus::tick,通常你會來,在中Zeus.cpp文件。你只宣佈它。

double Zeus::tick = 0.0; 

另外,在C++中沒有static class

另外,可以將自由函數放在名稱空間中,而不是類的靜態函數。這是C++中的首選方式,除非該函數有很強的靜態原因。

namespace Dionysus { 
    void testing(); 
} 
+0

好的,太好了。這解決了問題。 – user1601045 2012-08-15 16:04:50

0

由於錯誤消息說:沒有Zeus::tick的定義。這種加入Zeus.cpp:

double Zeus::tick; 

哦,在Zeus.h刪除static

static class Zeus 
0

在你有main()功能,你是什麼意思的聲明Zeus::tick = 25.0;是什麼意思? Zeus是一類。所以要訪問它的單個元素,你需要創建它的實例。它就像一個結構,你首先創建它的實例來訪問它的單個元素。

嘗試以下操作:

int main() { 
    Zeus myobject; 

    myobject.tick = 25.0; 
    /* Rest of the definition */ 
} 
+0

這將工作(如果原始錯誤是固定的),但沒有必要。 'tick'是一個靜態數據成員,所以不需要一個對象。最初編寫的代碼很好。 – 2012-08-15 16:12:28

+0

哦!我沒有看到它是靜態的! – 2012-08-15 18:34:53