程序猿们考验你们的时候到了(一个C++问题)
- wq_xenocide背景:C++中头文件.h中的函数声明 如果参数是类变量,可以只声明该类,无需包含这个类的的头文件,而只在cpp中包含就行。问题来了,如果这个参数类包含命名空间限定如 cv::Mat,这个时候有办法实现在头文件不包含cv.h而只在cpp中包含?
一个例子如下,但是无论怎么都搞不定,不知道有没有牛人知道是否有解决方案,或者就是无解的。复制代码- //A.h
- class Mat;
- class A
- {
- A& set(Mat& mt);
- }
- //A.cpp
- #include "cv.h"
- //using namespace cv; 不行
- //using cv::Mat;不行,重定义
- A& A::set(cv::Mat& mt)//报错,无声明;
- {
- ...
- }
- //A.h
- B-SIDE你的Mat在.h是forward declaration.只能是抽像的pointer 或 reference,要能compile,必须有具体的Mat 的implementation.
- ywergs在头文件里这么写:
namespace cv
{class mat;}后面的应该就可以直接using 了