私は、 TTK (トリガー ツールキット)を使用してサービスを提供する Debian サーバーをセットアップする任務を負っています。
ただし、ソフトウェアは 1997 年のもののようで、g++
メンテナンスされておらず、デフォルトでは GCC () でコンパイルされません (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)’
このコードは、 andなどのさまざまな型ではなくistream::read
、文字配列 ( ) を受け入れる必要があると指定している C++ 標準を知らなかったようです (実際には、標準ではなくhereを読みました)。char *
short *
double *
このコードを間違って解釈していますか? 規格のこの側面は 1997 年以降変更されていますか? それとも、このコードはそもそも機能しないだけでしたか (それについて書かれた論文があるので、これは非常に疑わしいです)。
最後に、これを修正するにはどうすればよいですか?C スタイルにキャストs
するchar *
とエラーが解消されるようですが、問題が解決するかどうかはわかりません。