2011-12-29 3 views
7

ハイブリッドツリー(重要ではない)の実装を探していて、「古い」ものを見つけるのはhereです。古いコンパイラ用のプログラムを実行するには?

著者は、彼らが(Solaris 2.6のを実行している)SUN SPARCプラットフォーム上とのgcc-2.8.1コンパイラでこのコードを試してみました。私の環境はgccバージョン4.4.3Ubuntu 10.10)です。

問題がある: 私は彼が提供してメイクファイルを「作る」実行されますが、以下のように、それは私のエラーメッセージの多くを与える:

g++ -c Node.C 
g++ -c DataNode.C 
In file included from DataNode.h:18, 
       from DataNode.C:17: 
Query.h:9:20: error: vector.h: No such file or directory 
Query.h:10:19: error: stack.h: No such file or directory 
Query.h:13:22: error: function.h: No such file or directory 
Query.h:14:22: error: iostream.h: No such file or directory 
DataNode.C:283:8: warning: extra tokens at end of #endif directive 
In file included from DataNode.h:18, 
       from DataNode.C:17: 
Query.h:29: warning: ‘typedef’ was ignored in this declaration 
Query.h:44: warning: ‘typedef’ was ignored in this declaration 
Query.h:86: error: expected initializer before ‘<’ token 
Query.h:118: error: ISO C++ forbids declaration of ‘PQ’ with no type 
Query.h:118: error: expected ‘;’ before ‘*’ token 
Query.h:122: error: ISO C++ forbids declaration of ‘PQ’ with no type 
Query.h:122: error: expected ‘;’ before ‘*’ token 
Query.h:126: error: ISO C++ forbids declaration of ‘PQ’ with no type 
Query.h:126: error: expected ‘;’ before ‘*’ token 
Query.h:135: error: expected initializer before ‘<’ token 
DataNode.C: In member function ‘void DataNode::DisconnectBranch(int)’: 
DataNode.C:80: error: ‘memmove’ was not declared in this scope 
make: *** [DataNode.o] Error 1 

私は私がするように源泉コードを変更する必要があります知っています例えばvector.hからvectorへの変更など、mordenコンパイラに同意します。しかし、私はそれがただ無限であることがわかります。

私の質問は:このプログラムを実行するには、このコードを「現代風」に自動的に変換するか、スタンドアロンの「旧式」コンパイラを使用しても問題ありませんか?

提案がありますか?

=== 更新: ===

は私が--prefix=/usr/local/gcc-2.8.1を使用して別のディレクトリにgcc2.8.1を設置し、この古いバージョンのgcc(/usr/local/gcc-2.8.1/bin/gcc)を使用する「メイクファイル」を修正し、あなたのすべてをありがとうございます。しかし、私は「作る」を実行するとき、それはまだ私にヘッダが見つからないのエラーを与える:

/usr/local/gcc-2.8.1/bin/gcc -c DataNode.C 
In file included from DataNode.h:18, 
       from DataNode.C:17: 
Query.h:9: vector.h: No such file or directory 
Query.h:10: stack.h: No such file or directory 
Query.h:11: deque: No such file or directory 
Query.h:12: algorithm: No such file or directory 
Query.h:13: function.h: No such file or directory 
Query.h:14: iostream.h: No such file or directory 
make: *** [DataNode.o] Error 1 

それから私はfind /usr/local/gcc-2.8.1 -name "*vector*"を使用して/usr/local/gcc-2.8.1にこれらのヘッドを見つけることを試みたが、何も得ませんでした。

古いバージョンのgccの頭はどこにありますか?

答えて

-2

まず、エラーメッセージに記載されているシステムヘッダーファイルから ".h"を削除してみます。それはおそらくあなたに他のエラーを与えるでしょうが、ただ一つずつ試して修正してください。

+1

彼は特にヘッダーの名前を変更する以外の解決策を求めました。 –

+1

さらに、ヘッダーの名前を変更しても、ヘッダーの終わり近くにはありません。あなたがそのルートに行くならば、 ''は 'std'に全てを入れます。例えば、 ''はそうではありません。 – cHao

7

ベクトルを含むvertor.hを自分で作ることができます。こうすることで、非互換性を非侵襲的に修正できます。

編集:

また、ヘッダファイル(複数可)に using namespace std; を追加する必要があります。これは 一般的に悪い考えですが、これは私がとにかくやっている一つの状況です。

これが動作すると、新しいスタイルのヘッダーファイルと名前空間を使用するように書き直すことをおすすめします。

+0

名前空間を読み込むことはコンパイラのことなので、その前に '#'はありません! – ThiefMaster

+0

ありがとうございます。修正されます。私は自分のC++が錆びていると言った。 –

3

Debian Lenny(oldstable)にはgcc 3.4があります。これにより、下位互換性が向上する可能性があります。残りの問題のために互換性ヘッダーを作成して、余分な-Iディレクトリ(例: vectorを含むvector.hヘッダーファイル。

自分で好きなことをして、古いコードに触れないようにしてください。予期しない方法でレガシーコードを簡単に破ることができます。

0

supports Solaris 2.6 QEMUでプログラムを実行してみてください。唯一の問題は、ディスク/イメージのインストールを捜すことです。また、古いSolarisボックスを安価にeBayに販売している人もいます。あなたはそれをつかむことができます。

GCCは、非常に古いバージョンのダウンロードを提供します。古いバージョンのコンパイラを試してみると、より良い機会を得ることができます。

+0

thx、私はこれを試みたが、まだ動作しません。投稿を更新しました – teloon

0

gcc-fpermissiveオプション:少なくともいくつかのエラーが消えるかどうかを確認してください。また、をすべて含む必須のヘッダーを使用する単一のヘッダーファイルを作成してみてください。

#include <vector> 
#include <iostream> 
#include <stack> 
... 

using std::vector; 
using std::fstream; 
... 

は、すべてが単一でレガシーC++ヘッダファイルの言及に置き換えstdinc.hを含める:たとえば、stdinc.hを含む作ります。古いC++には名前空間がなかったので、個々の指令をただちにusing namespace std;に置き換えても、衝突は起こりそうにありません。

0

sedをしようとしないのはなぜ唯一のものは

#include <vector> 
using namespace std; 

#include <vector.h> 

ある場合は?

grep for allには、C++ヘッダー以外のインクルードが含まれているかどうかが表示されます。あなたの幸運ではない場合。

もう一つ難しいのは、イテレータを使って非標準的な方法でデータにアクセスする古いコードがあることです。私はLinuxのためのDoomマップエディタでそれを見た。それから、手作業をする必要があるかもしれません。

関連する問題