容易误导的编译提示
//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只是做了一件它认为正确的事而已....
相关文章
- [c++] 小心析构函数 - 07 22, 2010
- [compiler] gcc下的errno冲突 - 01 21, 2010
- “我能见一下为我做这份晚餐的厨师吗?” - 01 08, 2010
留言: