2015-05-03 82 views
1

我開始學習D語言(它非常棒),並且在開始探索函數時遇到了一個小問題。該設置是非常基本的;這只是一種找出語言與我所用的其他語言相似之處的方法。這裏是我的類聲明:D語言靜態類功能未定義標識符

module TestClass; 
import std.string; 
class TestClass 
{ 
    this() 
    { 
     // Constructor code 
    } 

    public static string getData(){ 
     return "Test"; 
    } 
}; 

,這裏是我的主:

module main; 

import std.stdio; 
import std.string; 
import TestClass; 

void main(string[] args) 
{ 
    writeln(TestClass.getData()); 
    stdin.readln(); 
} 

似乎有與調用TestClass中的靜態函數是一個問題。我收到「未定義的標識符」錯誤。這裏是一個圖片:

enter image description here

有誰知道我做錯了嗎?我試圖通過數字火星網站上的文檔,但說實話這是一個反直覺。

+0

一個獨立的模塊,它的版本d您使用的是要? – cfh

+0

@cfh無論什麼時候。我想我只是找到了答案。這很奇怪,我個人不太喜歡它......但這是一個模塊錯誤。爲了讓它起作用,我必須輸入TestClass.TestClass.getData();我正在尋找解決方法。 – Krythic

回答

5

不具有d編譯器方便,現在,不與語言在一段時間的工作,我想在D.

開始時,我記得有類似的問題

我覺得import聲明模塊TestClass在拉,所以當你輸入TestClass.getData()時,編譯器會認爲你所指的是TestClass模塊中的全局函數getData

您可以通過多種方式解決這個問題:

  • TestClass模塊重命名爲別的東西。這將避免模塊和類之間的名稱衝突。正如Jonathan M Davis在評論中指出的那樣,D社區的慣例是使用小寫字母表示模塊,因此您可以將其重命名爲testclass
  • 導入類明確:

    import TestClass : TestClass; 
    
  • TestClass.TestClass.getData()來引用類模塊內。

還應當指出的是,不像在Java中,類不需要每次在D.

+0

我可以定義一個沒有在模塊內的類嗎?我知道這是一個單獨的問題... – Krythic

+0

@Krythic:當然,這不是Java。 – cfh

+0

你能否在你的答案中增加一個例子來顯示這一點? – Krythic