我的任務是設置一個使用TTK(觸發工具包)提供服務的Debian服務器。爲什麼不用這個C++代碼編譯?
但是,該軟件似乎是從1997年開始的,並且沒有維護,並且不會在GCC(g++
)下默認編譯(v4.7.2)。
一些錯誤來源於未指定std
命名空間,並且我修復了這些錯誤。
但是,我遇到了類似的問題,該類似乎包含在軟件中用於硬件兼容性,特別是其功能read
。
類,從我所瞭解,應該是硬件的抽象的字節順序(或類似性質的東西):
public:
Architecture()
{
short y = 256;
short *x=&y;
alpha_byte_ordering = (*((char*) (x) + 1)) == 1 ? 1 : 0;
if (alpha_byte_ordering)
fprintf(stderr, "Architecture: detected alpha byte ordering.\n");
else fprintf(stderr, "Architecture: detected non-alpha byte ordering.\n");
}
int read(istream &is, short *s)
{
if (!is.read(s, sizeof(short))) return 0;
if (!alpha_byte_ordering) reverse_byte_order(s);
return 1;
}
還有許多其他的重載read
功能,他們都吐了出來錯誤,例如此一:
Architecture.H: In member function ‘int Architecture::read(std::istream&, short int*)’:
Architecture.H:31:34: error: no matching function for call to ‘std::basic_istream<char>::read(short int*&, long unsigned int)’
看來,如果此碼是無知C++標準我認爲指定istream::read
應該接受的字符陣列(char *
)的,而不是不同的類型,如short *
和double *
(我實際上讀取的是here,不在標準中)。
我是不是不正確地解釋這段代碼?自1997年以來標準的這一方面發生了變化嗎?或者是這個代碼只是無法使用(我有很高的懷疑,因爲有文章寫它)?
最後,我該如何解決這個問題? Casting s
至char *
C風格似乎消除了錯誤,但我不確定它是否解決了問題。
這似乎這樣的伎倆。然而,我認爲'reinterpret_cast'只用於多態類型,並且C型轉換足以用於基本類型和指針...... – corazza
@Yannbane'reinterpret_cast'是執行C風格轉換的C++方式,而'static_cast' 'dynamic_cast'是針對多態類型的。 –
@Yannbane看到[這個問題](http://stackoverflow.com/questions/8427107/c-style-cast-vs-reinterpret-cast)的詳細解釋 – nijansen