代码之家  ›  专栏  ›  技术社区  ›  mattbasta

C++中的C++——不使用指针时的分割错误

  •  2
  • mattbasta  · 技术社区  · 14 年前

    我尝试用G++来编译一些C++代码。在其他编译器中,它似乎工作得很好,但是无论什么原因,G++都不会产生工作输出。

    披露: 这是家庭作业的一部分,但我觉得这更像是一个编译器问题,因为它在其他编译器中工作。

    以下是造成巨大破坏的片段:

    set<int> t1, t2;
    

    这很奇怪,因为下面的代码工作得很好:

    set<int> *t1 = new set<int>();
    set<int> *t2 = new set<int>();
    

    当然,我必须使用 -> 而不是 . 但这是意料之中的。第一个片段在运行时产生分段错误。第二个是直觉上的,这是我所期望的。

    不管怎样,在幕后, .cpp 对于 set 有这样的:

    #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    
    template <class T>
    set<T>::set() : bag<T>() {}
    
    template <class T>
    set<T>::set(const set<T>& b) : bag<T>(b) {}
    

    这个 .h 如下所示:

    #include "bag.h"
    
    template <class T>
    class set : public bag<T>
    { 
        public:
            set( );
            set(const set &b);
    
    // ...
    
    };
    #include "set.cpp"
    

    最后但并非最不重要的是, bag.cpp bag.h 文件如下:

    using namespace std;
    
    template <class T>
    bag<T>::bag() {
        head = NULL;
    }
    
    template <class T>
    bag<T>::bag(const bag<T>& b) {
    
        // ...
    
    }
    

    袋子 :

    template <class T>
    class bag
    { 
        public:
            bag( );
            bag(const bag &b);
    
        // ...
    };
    #include "bag.cpp"
    

    再一次,我觉得G++讨厌我,但是再一次,我可能做了一些愚蠢的事情。只要朝正确的方向轻轻推一下就好了。

    1 回复  |  直到 14 年前
        1
  •  8
  •   nsanders    14 年前

    gcc -g -Wall foo.cpp
    

    gdb ./a.out