Квалифицированный идентификатор в объявлении перед токеном ‘=’

У меня есть два открытых класса; один статический (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);
^

Вот 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);
}

10

Решение

Я не очень понимаю, что вы пытаетесь сделать …. но статические переменные должны быть созданы в глобальной области видимости, вне основной функции:

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

int main(){

}

Но эта глобальная переменная Args не имеет смысла ….

14

Другие решения

В структуре вы объявлять переменные-члены, но когда вы определять их вы не можете сделать это в функции, это должно быть сделано в глобальной области, например,

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()
{
// ...
}

К сожалению это не может быть сделано, так как инициализация зависит от локального 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);
}
6

По вопросам рекламы [email protected]