OK、 C++ プロセスがステータス 3 の混乱で終了したことから、「ログ」参照を「cout」に置き換え、ファイルではなくコンソールに出力して、最小限のコードで単一のファイルに再構成および統合しました。code::blocks コンパイラで実行したところ、別のエラーが発生しましたが、同じ行で ['log' はこのスコープで宣言されていません] でした。独自のファイルにクラスがある場合、「ステータス3」でプログラムを閉じるだけです。
以前にスコープエラーに遭遇し、自分で修正し、理解したと思っていましたが、そうではないと思います...
#include <iostream>
#include <string> // Doesn't complain if this is not present...
using namespace std;
//------------------------------------------------------------
class Logfile {
public:
bool LACT; // Is log file active?
string value; // Data to be entered
Logfile();
~Logfile();
void entry(string value); // Make an entry
};
Logfile::Logfile() { // Constructor
LACT = true;
cout << "OPENED\n";
}
Logfile::~Logfile() {
cout << "CLOSED\n";
}
void Logfile::entry(string value) {
if ( LACT ) cout << value << endl;
}
//--------------------------------------------------
class Engine { // Constructor contains only code for this class right now
public :
Engine();
};
この行でコンパイラがハングし、エラーが発生します。
Engine::Engine() {
log.entry("Engine constructed"); // !Problem line!
}
問題は、別のクラス内から既存のオブジェクトのクラス メソッドを誤って呼び出していることだと考えていますか?
//--------------------------------------------------
int main()
{
Logfile log;
Engine engine;
cout << "Hello world!" << endl;
return 0;
}
問題の行を「//」すると、すべてが正常に実行され、コンソールに OPENED、Hello World!、CLOSED が出力されます。これは私が思っているよりもはるかに単純で初心者向けのものであると確信しているため、忍耐と時間をありがとう。
--
この質問をする最初の目的は (今ではわかります)、マルチファイル プログラムの任意の *.cpp ファイルからアクセスできる、グローバルに宣言されたオブジェクトを取得することでした。私はちょうどこの答えを見つけました:http://www.cplusplus.com/forum/beginner/3848/、これが同様の問題を抱えている他の人に役立つかもしれない場合に備えて。