自定义异常头文件

时间:2014-05-10 22:51:53

标签: c++ exception header-files

我对这个话题的理解显然出了问题,但我无法找到答案。我想要实现的是一个名为CustomException的自定义异常。我所做的是编译并且可以工作,但我认为我正在以错误的方式使用头文件。所以我做了以下3个文件:

  1. 的main.cpp

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

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

    #include "exception.h"
    
    CustomException::CustomException() {
    }
    
    void CustomException::doSomething() {
        printf("Hello World!");
    }
    
  4. 运行后,这是命令行:

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

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

2 个答案:

答案 0 :(得分:4)

您的问题是,您要定义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

请注意&#34; .o&#34;后缀通常用于目标文件,而不是用于可执行文件。

答案 1 :(得分:2)

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