容易误导的编译提示

    //Mutex.h
    class Mutex
    {
    public:
        Mutex(int resouce);

        //....
    };

    //Thread.h
    class Thread
    {
    public:
        void run(void)
        {
            //....
        }

    private:
        Mutex m_mutex;
    };

    int main(void)
    {
        Thread thr;
    }
        这段代码用 gcc 3.4.6 编译后产生的编译错误提示是:
        test.cpp: In function `int main()':
        test.cpp:25: error: no matching function for call to `Thread::Thread()'
        test.cpp:12: note: candidates are: Thread::Thread(const Thread&)
        *** Error code 1
       乍一看还以为是Thread的构造函数不对,找了半天才发现是m_mutex做为Thread的成员变量必须在Thread的构造中掉用自身的构造函数Mutex(int resouce) 。我的文件可不像这段代码这样明显,它们分散在好几个文件里,结果这个编译提示造成了极大的困惑。以后要小心编译器的误导。
       不过,编译器也并没有说错,确实可以直接用Thread的拷贝构造函数来创建一个新的Thread实例,gcc只是做了一件它认为正确的事而已....

相关文章

分类

留言:

关于文章

This page contains a single entry by DongHao published on 09 28, 2007 8:17 PM.

新一代引擎 was the previous entry in this blog.

mdbm和bdb is the next entry in this blog.

Find recent content on the main index or look in the 存档 to find all content.