程序猿们考验你们的时候到了(一个C++问题)

  • w
    wq_xenocide
    背景:C++中头文件.h中的函数声明 如果参数是类变量,可以只声明该类,无需包含这个类的的头文件,而只在cpp中包含就行。问题来了,如果这个参数类包含命名空间限定如 cv::Mat,这个时候有办法实现在头文件不包含cv.h而只在cpp中包含?

    一个例子如下,但是无论怎么都搞不定,不知道有没有牛人知道是否有解决方案,或者就是无解的。
    1. //A.h
    2. class Mat;
    3. class A
    4. {
    5. A& set(Mat& mt);
    6. }

    7. //A.cpp
    8. #include "cv.h"

    9. //using namespace cv; 不行
    10. //using cv::Mat;不行,重定义

    11. A& A::set(cv::Mat& mt)//报错,无声明;
    12. {
    13. ...
    14. }
    复制代码
  • B
    B-SIDE
    你的Mat在.h是forward declaration.只能是抽像的pointer 或 reference,要能compile,必须有具体的Mat 的implementation.
  • y
    ywergs
    在头文件里这么写:
    namespace cv
    {class mat;}后面的应该就可以直接using 了