'='标记之前的声明中的Qualified-id

tet*_*s11 10 c++ static opencv declaration

我有两个公共课; 一个静态(DesktopOps),一个非静态(Args),我试图初始化main中静态类的静态变量.

我一直得到的错误信息是:

main.cpp:25: error: qualified-id in declaration before '=' token
     Point DesktopOps::window_coords = Point(arg.topleft_x, arg.topleft_y);
                                     ^
main.cpp:26: error: qualified-id in declaration before '=' token
     Point DesktopOps::window_dims = Point(arg.width, arg.height);
                                   ^
Run Code Online (Sandbox Code Playgroud)

这是一个MWE:

#include <opencv2/opencv.hpp>

using namespace cv;

struct Args{
    int topleft_x, topleft_y, width, height;

    Args(){
        topleft_x = topleft_y = width = height = -1;
    }
};


struct DesktopOps {
    static Point window_coords;
    static Point window_dims;

};



int main(){
    Args arg();

    Point DesktopOps::window_coords = Point(arg.topleft_x, arg.topleft_y);
    Point DesktopOps::window_dims = Point(arg.width, arg.height);
}
Run Code Online (Sandbox Code Playgroud)

jpo*_*o38 14

我真的不明白你要做什么......但是必须在主函数之外的全局范围内创建静态变量:

Args arg;
Point DesktopOps::window_coords = Point(arg.topleft_x, arg.topleft_y);
Point DesktopOps::window_dims = Point(arg.width, arg.height);

int main(){

}
Run Code Online (Sandbox Code Playgroud)

但是这个全局的Args变量没有意义....


Som*_*ude 7

在结构中,您声明了成员变量,但是当您定义它们时,您无法在函数中执行它,它必须在全局范围内完成,如

struct DesktopOps {
    static Point window_coords;
    static Point window_dims;
};

Point DesktopOps::window_coords = Point(someX, someY);
Point DesktopOps::window_dims = Point(someW, someH);

int main()
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,由于初始化取决于函数中的局部arg变量,因此无法完成main.这意味着您必须分两步执行定义和初始化:

struct DesktopOps {
    static Point window_coords;
    static Point window_dims;
};

Point DesktopOps::window_coords;
Point DesktopOps::window_dims;

int main()
{
    Args arg;

    DesktopOps::window_coords = Point(arg.topleft_x, arg.topleft_y);
    DesktopOps::window_dims = Point(arg.width, arg.height);
}
Run Code Online (Sandbox Code Playgroud)