【问题标题】:C++ Process terminated with status 3 confusionC++ 进程因状态 3 混淆而终止
【发布时间】:2012-11-15 01:56:56
【问题描述】:

我对编程很陌生,但在过去一周左右的时间里一直在关注 c++ 教程并积累了许多 PDF 来帮助我。我在他们或网上找不到任何足够清楚地回答我的问题的东西。请原谅我的新手。

相关代码:

日志文件.hpp

// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
// HEADER :: CLASS INTERFACE FILE

// ==============================
// Include Guard
#ifndef __LOGFILE_INCLUDED__ // If Actor.hpp hasn't been included yet
#define __LOGFILE_INCLUDED__ // Define this for the compiler so it knows it has now been included

// ==============================
// Forward declared dependencies

// ==============================
// Included dependencies
#include <iostream>
#include <fstream>

// ==============================
// Actual class
class Logfile { // Logfile
public:
    // Globally accessible variables
    bool LACT; // Is log file active?
    std::ofstream LOG; // Actual log file
    std::string entry; // Data to be entered in log file

    // ==============================
    // Core methods
    Logfile(); // Constructor
    ~Logfile(); // Destructor

    // Additional methods
    bool isActive(); // Is log file active?
    void logEntry(std::string entry); // Make an entry in the log if 'LACT' is set to true
    void toggleLog(); // Toggle log file open or closed
};

extern Logfile *log; // This variable is declared in main

#endif // __LOGFILE_INCLUDED__

日志文件.cpp

// ==============================
// Included dependencies
#include "Logfile.hpp"

// ==============================
// Core methods
Logfile::Logfile() { // Constructor
    LACT = true; // Toggle logfile to active
    LOG.open ("LOG.txt"); // Open 'log.txt' and prepare it to receive 'LOG' entries
    LOG << "LOG FILE CLASS CONSTRUCTED\n";
    LOG << "LOG FILE OPENED\n";
}

Logfile::~Logfile() { // Deconstructor
    LOG << "LOG FILE CLOSED\n";
    LOG << "LOG FILE CLASS DECONSTRUCTED";
    LOG.close(); // Close log file
}

// Additional methods
bool Logfile::isActive() { // Is log file active?
    if ( LACT ) return true;
    else return false;
}

void Logfile::logEntry(std::string entry) { // Make an entry in the log if 'LACT' is set to true
    if ( LACT ) LOG << entry << std::endl;
}

void Logfile::toggleLog() { // Toggle log file open or closed
    if ( LACT ) { // Log file is active
        LOG << "LOG FILE CLOSED\n";
        LOG.close(); // Close log file
    } else { // Log file is inactive
        LOG.open ("LOG.txt"); // Open 'log.txt' and prepare it to receive 'LOG' entries
        LOG << "LOG FILE OPENED\n";
    }
}

Engine.hpp

// ==============================
// Forward declared dependencies
class Logfile;

class Engine { // Core system, main loop
public :
    // Globally accessible variables 
    Logfile *log; // Declare 'log' as an empty pointer (*)

Engine.cpp

// ==============================
// Included dependencies
#include "Logfile.hpp"

// ==============================
// Core methods
Engine::Engine() { // Constructor method
    // Initialization
    log = new Logfile(); // Declare 'log' as pointer to access log file
    TCODConsole::initRoot(80,50,"Testbed",false); // Create 'root' console (not fullscreen)
    if ( log->isActive() ) log->logEntry("(TCODConsole) Root console initialized"); // WORKS

地图.hpp

// ==============================
// Forward declared dependencies
class Logfile;

extern Logfile *log; // Pointer exists in Engine.hpp

地图.cpp

// ==============================
// Included dependencies
#include "Logfile.hpp"

if ( log->isActive() ) log->logEntry("(TCODConsole) Root console initialized"); TERMINATION STATUS 3
if ( tiles[(x-1)+y*width].tType =="floor" ) tally++; // Left tile status, add 1 to tally if floor  :  TERMINATION STATUS 3
if ( tiles[(x-1)+(y-1)*width].canWalk ) tally++; // Left-top tile status, add 1 to tally if floor  :  WORKS

如果我理解正确,终止状态 3 表示我错误地引用了一个关于它是否是指针的变量......?当我想从 Map.cpp 中 2Darray 中的单个图块访问 tType 字符串时,我最初遇到了这个问题(尽管我可以访问布尔变量 canWalk 就好了......),但不知道出了什么问题,所以我决定学习实现一个外部日志来查找问题......但我想我在这样做时找到了回到同一个问题的方法......

非常感谢任何帮助,批评也是如此,我还有很多东西要学。

--

我问这个问题的最初目的是(现在我意识到)从多文件程序中的任何 *.cpp 文件中获取一个全局声明的对象。我刚刚找到了这个答案:http://www.cplusplus.com/forum/beginner/3848/,以防这可能对其他有类似问题的人有所帮助。

【问题讨论】:

  • 嘿,伙计,这是需要阅读的大量代码,通常人们会尝试减少代码并仅显示问题区域。阅读常见问题解答对于获得好的答案非常有帮助。否则发到codereview.stackexchange.com
  • 这个问题不是关于编译错误的。因此,假设您可以发布简短的、独立的、编译的内容,并且可以说明您遇到的问题。这肯定至少错过了其中一个;可以说都是。请参阅SSCCE 并重新表述您的问题。
  • 我们未知的东西和字符串文字之间的相等比较,tiles[(x-1)+y*width].tType =="floor" 应该是一个很大的危险信号,您可能需要考虑查看。
  • if ( log-&gt;isActive() ) log-&gt;logEntry("(TCODConsole) Root console initialized"); TERMINATION STATUS 3 TERMINATION STATUS 3 在那里做什么?下一个if之前没有分号怎么编译?
  • @Daniel 抱歉,在 TERMINATION STATUS 3 前面应该有一个 //,这是给我的注释。 -WhozCraig 我会查看您发送的 SSCCE 链接。 -Ben 好的,我也去看看。感谢大家的回复。

标签: c++ class pointers reference compiler-errors


【解决方案1】:

在您的 Logfile.hpp 中,您缺少 #include &lt;string&gt;:您的 LogFile 类变量之一被声明为 std::string,因此您需要包含它。

在您的 Engine.cpp 中,您忘记在 LogFile *log 的位置包含您的 Engine.hpp;变量被声明。这会导致您的 Engine.cpp 文件中出现错误,您在该文件中尝试为其分配一个新的 LogFile 对象。

所以将#include &lt;string&gt; 添加到Logfile.hpp 的顶部,并将#include "Engine.hpp" 添加到Engine.cpp 的顶部

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-02
    • 1970-01-01
    • 1970-01-01
    • 2019-04-22
    • 2013-09-26
    • 2019-01-04
    相关资源
    最近更新 更多