【问题标题】:CustomException headerfile自定义异常头文件
【发布时间】:2014-05-10 22:51:53
【问题描述】:

显然我对这个主题的理解出了点问题,但我不知道在哪里。我想要实现的是一个名为CustomException 的自定义异常。我所做的确实可以编译并且可以工作,但我确实认为我以错误的方式使用头文件。所以我做了以下3个文件:

  1. main.cpp

    #include "exception.h"
    
    int main() {
        try {
            throw CustomException();
        } catch (CustomException ce) {
            ce.doSomething();
        }
    }
    
  2. 异常.h

    #include <exception>
    
    class CustomException : public std::exception {
        private:
            char* msg;
        public:
            CustomException() {};
            void doSomething() {};
    };
    
  3. 异常.cpp

    #include "exception.h"
    
    CustomException::CustomException() {
    }
    
    void CustomException::doSomething() {
        printf("Hello World!");
    }
    

运行后是命令行:

$ g++ main.cpp -o main.o
$ ./main.o
$

但我正在寻找的行为是“Hello World!”打印到命令行。我更习惯于 JAVA,所以也许这就是为什么我对 C++ 有一个粗略的开始。无论如何,我希望你能帮助我,因为我发现的教程彼此不同,对我来说没有意义。

【问题讨论】:

  • 任何体面的编译器都会拒绝此代码 - 请参阅 user3553031 的答案
  • @DieterLücking 任何符合标准的编译器都会采用此代码,因为它甚至不知道 exception.cpp 是否存在 :-)

标签: c++ exception header-files


【解决方案1】:

您的问题是您将CustomException::doSomething() 定义为什么都不做:{}。在 exception.h 中省略 {} 方法定义。然后编译并将 exception.cpp 链接到您的二进制文件中:

$ g++ -c main.cpp -o main.o
$ g++ -c exception.cpp -o exception.o
$ g++ main.o exception.o -o main
$ ./main

请注意,“.o”后缀通常用于目标文件,而不是可执行文件。

【讨论】:

  • 我也试过了,但我遇到了一些错误,例如:undefined reference to CustomException::CustomException()
  • 我也必须为#include &lt;stdio&gt;printf
【解决方案2】:

除了 user3553031 所说的之外,您的代码还有另一个可能的问题。在 C++ 中,您应该通过引用而不是值来捕获异常。否则可能会导致问题。看到这个:C++ catch blocks - catch exception by value or reference?

【讨论】:

  • 好的,感谢您的提示,我已将 CustomException ce 更改为 CustomException &amp;ce :)
猜你喜欢
  • 2015-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-03
  • 2016-07-27
  • 2015-02-05
相关资源
最近更新 更多