2010-09-18 208 views
-1

我想弄清楚爲什麼這不起作用。我想要做像Java中,其中主要是在一類的靜態功能,但這是生產解析外部符號錯誤:靜態主類靜態類?

static class MainClass 
{ 
    public: 
    static int _tmain(int argc, char* argv[]) 
    { 
     return 0; 
    } 
}; 

爲什麼不這項工作?

感謝

+1

你想通過在類中放置_tmain()來完成什麼? – 2010-09-18 16:48:51

+8

C++不是java ... – Nikko 2010-09-18 16:49:05

+9

爲什麼人們必須嘗試編程*「像在X語言中」*?如果在羅馬,... – 2010-09-18 16:49:49

回答

10

C++不能像那樣工作。
您需要主要的功能:

int main(int argc,char* argv[]) 
{ 
    //STUFF 
} 
6

因爲_tmain與在它的類名MainClass二進制錯位,所以多類可以在他們,而不是衝突的功能_tmain。它沒有像::_tmain那樣得到相同的損壞名稱。

我記得有MSVC的早期版本,它接受沒有它結束了意外的宏擴展在我的代碼庫結果的鏈接錯誤以下一次

namespace bar { 
    int main() { } 
} 

它顯然治療名字main特別是並沒有將其碾壓或與::main相同。但這樣的事情不符合標準。就像在課堂上的情況一樣,這種功能與主要功能完全無關。

0

這不是一個真正的C++,這麼多,因爲它正在尋找一個特定名稱的出口(與C風格的鏈接)的標準連接過程。具體的導出根據編譯器和可執行文件類型而有所不同,但格式是針對每種類型的。例如,Windows GUI exe具有與控制檯不同的入口點,並且特定於ASCII或UNICODE。但是鏈接器一直在尋找一個具有特定鏈接名稱的函數,這就是爲什麼一個靜態成員不起作用。

1

_tmain從CRT調用。您需要在鏈接器中設置另一個函數的入口點,該函數將調用MainClass :: _ tmain。

1

因爲在C++中,不能在類中放入入口點。 This answer可能會有所幫助。

0

您始終需要將main()定義爲全局函數。這是程序始終以C++開始的地方。你可以簡單地從main調用你的靜態類函數,並傳遞變量,如果你真的想要:

class MainClass 
{ 
    public: 
    static int _tmain(int argc, char* argv[]) 
    { 
     return 0; 
    } 
}; 

int main(int argc, char* argv[]) { 
    return MainClass::_tmain(argc, argv); 
} 
1

爲什麼不行?因爲它不是C++。

struct MainClass { 
    static int main(int argc, char** argv) { 
    return 0; 
    } 
}; 

int main(int argc, char** argv) { 
    return MainClass::main(argc, argv); 
}